嵌套多页时选择用户窗体中的特定页面

Selecting Specific Pages in a Userform when MultiPages are Nested

我有一个用户表单,其中包含 3 个“top-level”页面(使用多页功能),然后是四个嵌套页面,每个页面位于 top-level 个页面中的两个。

嵌套多页用户表单的屏幕截图

在此示例中,页面标题和名称相同。因此,标题为 Page4 的页面也被命名为 Page4。我在网上找到代码,当页面名称传递给它时,应该 return 页面索引:

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

这适用于 top-level 页面,但是,当我尝试类似的操作时:

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

对于任何嵌套页面(在本例中为第 4 和第 5 页),则此方法 return 的值为 -1,表示该页面不存在。这是范围问题吗?上面的代码是否只搜索 top-level 页面而不搜索嵌套页面?

通过名称和/或标题以编程方式引用特定页面的最安全、最可靠的方法是什么?我假设它会是这样的:

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

在这个例子中,我只有一个用户表单,但是如果我有两个用户表单呢?另外,在上面的示例中,我假设必须指定引用两个页面条中的哪一个。

理想情况下,我想要一种方法来使用对用户窗体中每个页面的绝对引用,无论它是 top-level 页面还是嵌套页面。

在您的屏幕截图中,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) 引用了 Page2,并且 MultiPage2.Pages(0) 引用第 4 页。