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 上放置一个断点,启动其中一个窗体并点击按钮来回跳转几次。然后关闭其中一个窗体并计算在真正退出之前遇到断点的次数。