我正在处理一个用户表单,试图在多页中循环这些控件。
用户表单有2个多页(MultiPage1和MultiPage2)。
Multipage2包含在Multipage1中。
当只有MultiPage1存在时,我可以运行以下代码:
For Each pPage In frmValidationTest.MultiPage1.Pages但是,在创建了这个嵌套系统之后,并且我试图再次运行它,将显示以下错误:
“类型不匹配”(在每个pPage行中)
变量pPages声明如下:
Dim pPage as Page我运行了Debug.Print模式来检查拼写错误问题,但是一切正常("frmValidationTest.MultiPage1.Pages.Name“实际上打印了一个输出)
当我查看pPages时,它声明变量是空的。
我刚刚意识到,在声明变量时,我有两个同名为"Page“的类。

不知道怎么回事,这正常吗?我想我不应该为同一个超级班上两个不同的班。(-F2-参考文献仅显示1)。
在结束、重新开始等之后,问题仍然存在。
希望只是一件小事!
在此之前,非常感谢您。
发布于 2016-06-05 03:39:08
在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 Subhttps://stackoverflow.com/questions/37636079
复制相似问题