我目前正在进行从Office2002 SP3到Office2010的迁移工作。
在大量使用VBA的Excel工作簿中,我遇到了以下问题:
以下函数在2002年的工作方式类似于charme,但在使用2010打开时会崩溃。
Private Function fktSeeall()
Dim pPage As Page, cCont As Control, mpMultiPage As Control
If Seeall Then
cbButton2.Caption = "Leere ausblenden"
Else
cbButton2.Caption = "Alle anzeigen"
End If
For Each mpMultiPage In Me.Controls
If TypeName(mpMultiPage) = "MultiPage" Then
For Each pPage In mpMultiPage.Pages
pPage.Visible = Seeall
For Each cCont In pPage.Controls
If TypeName(cCont) = "TextBox" And cCont.Text <> "" Then
pPage.Visible = True
mpMultiPage.Value = Right(pPage.Name, 1) - 1
End If
Next cCont
Next pPage
End If
Next
End Function布尔值Seeall设置在函数外部。所有页面都包含一个文本框。如果seeall设置为false,则隐藏除带有已填充文本框的页面外的所有页面。如果设置为true,则再次显示所有页面。
Office 2010在For Each pPage In mpMultiPage.Pages行失败,错误消息代码为13“类型不匹配”
它也会失败,如果我使用
For Each pPage In MultiPage1.Pages
pPage.Visible = Seeall
For Each cCont In pPage.Controls
If TypeName(cCont) = "TextBox" And cCont.Text <> "" Then
pPage.Visible = True
MultiPage1.Value = Right(pPage.Name, 1) - 1
End If
Next cCont
Next pPage我不明白为什么新的office版本在我代码的这个阶段失败了。
这是UserForm的屏幕截图:

发布于 2011-05-18 03:56:48
好了,想明白了!
从Excel 2007开始,对象模型有一个名为Page的对象,该对象与Forms Page不同。
使用Dim pPage As msforms.Page而不是Dim pPage As Page显式引用表单页属性
https://stackoverflow.com/questions/6031832
复制相似问题