UserForm.Multipage.Pages,两个库中的Page类

时间:2016-06-04 23:44:21

标签: excel-vba userform vba excel

我正在尝试用户表单尝试循环遍历多个控件。

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

Multipage2包含在Multipage1中。

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

For Each pPage In frmValidationTest.MultiPage1.Pages

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

“类型不匹配”(在For Each pPage行中)

变量pPages声明如下:

Dim pPage as Page

我已经运行Debug.Print Mode来检查拼写错误的问题,但一切正常(“frmValidationTest.MultiPage1.Pages.Name”确实打印出输出)

当我看一下pPages时,它声明变量是Nothing。

我刚才意识到,在声明变量时,我有2个同名“Page”的类。enter image description here

不确定发生了什么,这是正常的吗?我不认为我应该为同一个超类有2个不同的类。 (-F2- Ref Lib仅显示1)。

关闭,重启后等问题仍然存在。

希望只是一件小事!

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

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

enter image description here

然后这段代码应该有效:

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