我目前正致力于从Office 2002 SP3迁移到Office 2010。
在大量使用VBA的Excel工作簿中,我遇到了以下问题:
以下功能在2002年就像魅力一样,但在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,则每个Page都会删除带有填充文本框的页面。如果设置为true,则会再次显示所有页面。
Office 2010失败了
For Each pPage In mpMultiPage.Pages
,错误消息代码为13“Type Dismatch”
如果我使用
,它也会失败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
我不明白这一点,为什么新的办公室版本在我的代码的这个阶段失败了。
这是UserForm的屏幕截图:
答案 0 :(得分:2)
好的想通了!
从Excel 2007开始,对象模型有一个名为Page的对象,它与表单页面不同。
使用Dim pPage As msforms.Page
代替Dim pPage As Page