我正在尝试用户表单尝试循环遍历多个控件。
用户表单有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个不同的类。 (-F2- Ref Lib仅显示1)。
关闭,重启后等问题仍然存在。
希望只是一件小事!
非常感谢提前。
答案 0 :(得分:1)
Page
和Excel
库中都有MSForms
个类。因此,最好在声明中使用库名称。例如,如果您的表单如下所示:
然后这段代码应该有效:
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