Office 2010 UserForm处理MultiPage控件中的页面

时间:2011-05-17 13:53:29

标签: vba ms-office

我目前正致力于从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的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:2)

好的想通了!

从Excel 2007开始,对象模型有一个名为Page的对象,它与表单页面不同。

使用Dim pPage As msforms.Page代替Dim pPage As Page

明确引用表单页面属性