Выбор определенных страниц в пользовательской форме при вложении нескольких страниц

У меня есть одна пользовательская форма с 3 страницами верхнего уровня (с использованием многостраничной функциональности), а затем с четырьмя вложенными страницами, каждая из которых находится внутри двух страниц верхнего уровня.

Снимок экрана вложенной многостраничной пользовательской формы

Скриншот вложенной многостраничной пользовательской формы

В этом примере заголовки и названия страниц совпадают. Следовательно, страница с заголовком Page4 также называется Page4. Я нашел в Интернете код, который должен возвращать индекс страницы, когда ей передается имя страницы:

Function fMpIndex(ByVal PageName As String)

    Dim PageCounter As Long

    With MultiPage1

        For PageCounter = 0 To .Pages.Count - 1

            If .Pages(PageCounter).Name = PageName Then fMpIndex = PageCounter: Exit Function
        Next PageCounter
    End With
    fMpIndex = -1

End Function

Однако это работает для страниц верхнего уровня, когда я пробую что-то вроде:

MsgBox ("This page's index is " & fMpIndex("Page5"))

для любой из вложенных страниц (в этом примере обе страницы 4 и 5) этот метод возвращает значение -1, указывающее, что страница не существует. Это проблема объема? Приведенный выше код выполняет поиск только страниц верхнего уровня, а не вложенных страниц?

Каков самый безопасный и надежный способ программной ссылки на конкретную страницу по имени или заголовку, либо по обоим параметрам? Я предполагаю, что это будет примерно так:

which userform.which page strip.which page.name("Page5")

В этом примере у меня только одна пользовательская форма, но что, если бы у меня было две пользовательские формы? Кроме того, в приведенном выше примере я предполагаю, что нужно указать, на какую из двух полос страниц ссылаются.

В идеале мне нужен способ использовать абсолютную ссылку на каждую страницу в пользовательской форме, независимо от того, является ли она страницей верхнего уровня или вложенной страницей.


person Dan    schedule 15.10.2017    source источник


Ответы (1)


На вашем снимке экрана единственными страницами в MultiPage1 являются Page1, Page2 и Page3. На них можно ссылаться, используя (например) MultiPage1.Pages("Page1"). MultiPage1.Pages("Page4") не существует.

Page1 содержит MultiPage2, а его страницы - Page4 и Page5. Это могут быть ссылки с использованием MultiPage2.Pages("Page4").

Вы можете ссылаться на страницы в элементе управления MultiPage по индексу, как в MultiPage1.Pages(iPageIndex), где iPageIndex идет от 0 до количества страниц минус один. На вашем снимке экрана MultiPage1.Pages(1) ссылается на страницу 2, а MultiPage2.Pages(0) ссылается на страницу 4.

person Jon Peltier    schedule 27.12.2017