UserForm.Multipage.Pages,两个图书馆中的第 class 页

UserForm.Multipage.Pages, Page class in two libraries

我正在处理一个用户窗体,试图循环访问多页中的控件。

用户表单有 2 个多页(MultiPage1 和 MultiPage2)。

Multipage2 包含在 Multipage1 中。

当只有 MultiPage1 存在时,我可以 运行 以下代码:

For Each pPage In frmValidationTest.MultiPage1.Pages

但是在创建这个嵌套系统后,我再次尝试 运行 它,显示以下错误:

"Type Mismatch"(在 For Each pPage 行中)

变量pPages声明如下:

Dim pPage as Page

我有 运行 Debug.Print 模式来检查拼写错误问题,但一切正常("frmValidationTest.MultiPage1.Pages.Name" 实际上打印输出)

当我查看 pPages 时,它声明该变量为 Nothing。

才发现声明变量的时候有2个类同名"Page".

不确定这是怎么回事,这正常吗?我认为我不应该为同一个超类设置 2 个不同的 类。 (-F2- Ref Lib 只显示 1).

关闭、重启等后,问题依旧。

希望只是小事!

非常感谢。

ExcelMSForms 库中都有 Page class。因此,您最好在声明中使用库名称。例如,如果您的表单如下所示:

那么这段代码应该可以工作:

Option Explicit

Private Sub CommandButton1_Click()

    ' declare variables using specific libraries
    Dim mpgItem1 As MSForms.MultiPage
    Dim mpgItem2 As MSForms.MultiPage
    Dim pagItem1 As MSForms.Page
    Dim pagItem2 As MSForms.Page
    ' other variables
    Dim ctlItem As Control
    Dim intCounter1 As Integer
    Dim intCounter2 As Integer
    Dim intPageCount1 As Integer
    Dim intPageCount2 As Integer

    Set mpgItem1 = UserForm1.MultiPage1
    ' get page count of first multi page
    intPageCount1 = mpgItem1.Pages.Count

    ' not using for..each loop ...
    For intCounter1 = 0 To intPageCount1 - 1
        Set pagItem1 = mpgItem1.Pages(intCounter1)
        MsgBox pagItem1.Name
        For Each ctlItem In pagItem1.Controls
            ' looking for nested multi page
            If TypeName(ctlItem) = "MultiPage" Then
                ' same code as for first multipage
                Set mpgItem2 = ctlItem
                intPageCount2 = mpgItem2.Pages.Count
                For intCounter2 = 0 To intPageCount2 - 1
                    Set pagItem2 = mpgItem2.Pages(intCounter2)
                    MsgBox pagItem2.Name
                Next intCounter2
            End If
        Next ctlItem
    Next intCounter1

End Sub