在先前创建的MultiPage上调用添加时发生VB6自动化错误

时间:2018-07-17 09:05:55

标签: excel vba vb6 runtime-error excel-automation

我想在我的应用程序中生成一堆MultiPages并动态创建新的Pages,但是我遇到运行时错误'-2147417848(80010108)':自动化错误所调用的对象已与其客户端断开连接。

复制步骤

在名为TestClass的类模块中:

Public WithEvents TestMultiPage As MsForms.MultiPage

Sub createPage()
    TestMultiPage.Add
End Sub

在名为TestForm的用户窗体中:

Dim TestInstances as New Collection

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X as Single, ByVal Y as Single)
    If Button = fmButtonRight Then
        Dim TestInstance as New TestClass
        Set TestInstance.TestMultiPage = Me.Controls.Add("Forms.MultiPage.1")
        TestInstances.Add TestInstance
    End If
End Sub

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim TestInstance As TestClass: Set TestInstance = TestInstances(1)
    TestInstance.createPage
End Sub

当我用鼠标右键单击两次用户窗体时,我得到两个MultiPages。然后,我双击用户窗体,期望第一个MultiPage有一个新的Page。但是我发现TestInstance.createPage-> TestMultiPage.Add处出现自动化错误,即使所有变量似乎都在“本地”窗口中显示。

我想念什么?

结论

在@GSerg的回答之后,我想MultiPage无法做到这一点。 相反,我必须改用TabStrip并模拟MultiPage的其他行为。

仅添加一些上下文,我试图创建一个带有窗口和标签的类似于浏览器的UI(底部的TabStrip代表不同的窗口,每个窗口对应于具有多个标签的MultiPage)。切换回上一个MultiPage并创建新标签时,我遇到了晦涩的错误。

1 个答案:

答案 0 :(得分:2)

MSForms中似乎存在问题,当添加新的MultiPage控件时,它会破坏现有的MultiPage控件。要重现该问题,您不需要集合,数组,类甚至变量:

Sub Reproduce()
  Me.Controls.Add "Forms.MultiPage.1", "TestInstance1"
  Me.Controls("TestInstance1").Add  ' That works

  Me.Controls.Add "Forms.MultiPage.1", "TestInstance2"
  Me.Controls("TestInstance1").Add  ' Now it does not
  Me.Controls("TestInstance2").Add  ' But the new shiny one does

  Me.Controls.Add "Forms.MultiPage.1", "TestInstance3"
  Me.Controls("TestInstance2").Add  ' Now the instance 2 is also defunct
  Me.Controls("TestInstance3").Add  ' Only the latest one works
End Sub

我不知道为什么会这样。它看起来像是MSForms中的错误。

否则,这些控件可以正常工作,并且它们的属性可以访问,您就无法再调用Add