VBA combobox additem 并出现运行时错误 70
VBA combobox additem and getting a runtime error 70
我创建了一个用户表单,上面有两个按钮。一个称为 CmdCon6,另一个称为 CmdLbs6。单击时,他们应该关闭当前用户窗体,拉出另一个用户窗体,并从 sheet18 的第 4 列中提取值并将它们添加到新用户窗体中名为 x48 的组合框(两个新用户窗体都有一个名为 x48 的组合框) .要添加到组合框 x48 的单元格值范围会波动,但绝不会超过 20(因此我添加了一个循环)。当我点击 CmdCon6 按钮时,一切都很好,并且按照预期的方式进行,但是当我点击 CmdLbs 按钮时,它给我一个 运行-time error '70' Permission denied 并突出显示第 20 行代码(在 Sub CmdLbs_Click() 中的 If 和 end if 之间的线)。
我尝试更改 frmInputLbs6 用户窗体中组合框 x48 的名称,并将其保留为 frmInputCon6 用户窗体的 x48,但我仍然收到相同的错误。
有什么解决这个问题的建议吗?我很难过,想不出解决办法。提前致谢!
Private Sub CmdCon6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputCon6.x48.AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputCon6.Show
End Sub
Private Sub CmdLbs6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputLbs6.x48.AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputLbs6.Show
End Sub
默认情况下,用户窗体上的控件是私有的。您需要通过控件集合访问它们:
Private Sub CmdLbs6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputLbs6.Controls("x48").AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputLbs6.Show
End Sub
我还注意到,尽管您提到 "they are suppose to close the current userform",但实际情况并非如此。在关闭 other 表单之前,您的表单实际上也没有完全卸载。 .Show
方法默认为模态,因此在上面的代码中 frmInputCon6
直到 after [=15 才完全卸载=] 关闭。
只是要记住一点,因为它确实会弄乱您的事件堆栈。您可以使用这个简单的测试代码查看结果。添加 UserForm1 和 UserForm2,并在它们每个上放置一个按钮和以下代码:
UserForm1:
Private Sub CommandButton1_Click()
Unload Me
UserForm2.Show
End Sub '<--Put a breakpoint here.
Private Sub UserForm_Terminate()
Debug.Print "UserForm1 closed"
End Sub
用户窗体2:
Private Sub CommandButton1_Click()
Unload Me
UserForm1.Show
End Sub '<--Put a breakpoint here.
Private Sub UserForm_Terminate()
Debug.Print "UserForm2 closed"
End Sub
在每个 Click() 事件的 End Sub
上放置一个断点,启动其中一个窗体并点击按钮来回跳转几次。然后关闭其中一个窗体并计算在真正退出之前遇到断点的次数。
我创建了一个用户表单,上面有两个按钮。一个称为 CmdCon6,另一个称为 CmdLbs6。单击时,他们应该关闭当前用户窗体,拉出另一个用户窗体,并从 sheet18 的第 4 列中提取值并将它们添加到新用户窗体中名为 x48 的组合框(两个新用户窗体都有一个名为 x48 的组合框) .要添加到组合框 x48 的单元格值范围会波动,但绝不会超过 20(因此我添加了一个循环)。当我点击 CmdCon6 按钮时,一切都很好,并且按照预期的方式进行,但是当我点击 CmdLbs 按钮时,它给我一个 运行-time error '70' Permission denied 并突出显示第 20 行代码(在 Sub CmdLbs_Click() 中的 If 和 end if 之间的线)。
我尝试更改 frmInputLbs6 用户窗体中组合框 x48 的名称,并将其保留为 frmInputCon6 用户窗体的 x48,但我仍然收到相同的错误。
有什么解决这个问题的建议吗?我很难过,想不出解决办法。提前致谢!
Private Sub CmdCon6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputCon6.x48.AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputCon6.Show
End Sub
Private Sub CmdLbs6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputLbs6.x48.AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputLbs6.Show
End Sub
默认情况下,用户窗体上的控件是私有的。您需要通过控件集合访问它们:
Private Sub CmdLbs6_Click()
Unload Me
For x = 1 To 20
If Sheet18.Cells(x, 4).Value <> "" Then
frmInputLbs6.Controls("x48").AddItem Sheet18.Cells(x, 4)
End If
Next x
frmInputLbs6.Show
End Sub
我还注意到,尽管您提到 "they are suppose to close the current userform",但实际情况并非如此。在关闭 other 表单之前,您的表单实际上也没有完全卸载。 .Show
方法默认为模态,因此在上面的代码中 frmInputCon6
直到 after [=15 才完全卸载=] 关闭。
只是要记住一点,因为它确实会弄乱您的事件堆栈。您可以使用这个简单的测试代码查看结果。添加 UserForm1 和 UserForm2,并在它们每个上放置一个按钮和以下代码:
UserForm1:
Private Sub CommandButton1_Click()
Unload Me
UserForm2.Show
End Sub '<--Put a breakpoint here.
Private Sub UserForm_Terminate()
Debug.Print "UserForm1 closed"
End Sub
用户窗体2:
Private Sub CommandButton1_Click()
Unload Me
UserForm1.Show
End Sub '<--Put a breakpoint here.
Private Sub UserForm_Terminate()
Debug.Print "UserForm2 closed"
End Sub
在每个 Click() 事件的 End Sub
上放置一个断点,启动其中一个窗体并点击按钮来回跳转几次。然后关闭其中一个窗体并计算在真正退出之前遇到断点的次数。