Пользовательская форма Office 2010, обрабатывающая страницы в многостраничном элементе управления - PullRequest
1 голос
/ 17 мая 2011

В настоящее время я работаю над миграцией с Office 2002 с пакетом обновления 3 (SP3) на Office 2010.

В книге Excel с интенсивным использованием VBA я сталкиваюсь со следующей проблемой:

Следующая функцияработает как шарм в 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, каждая страница, за исключением страниц с заполненными текстовыми полями, скрыта.Если установлено значение 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 не работает на данном этапе моего кода.

Это скриншот пользовательской формы: enter image description here

1 Ответ

2 голосов
/ 17 мая 2011

Хорошо, разобрался!

Начиная с Excel 2007 и далее, объектная модель имеет объект с именем Page, который отличается от страницы форм.

Ссылка на свойство страницы формы выполняется явноDim pPage As msforms.Page вместо Dim pPage As Page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...