嵌套多页时,在用户表单中选择特定页面

时间:2017-10-15 12:24:59

标签: excel vba userform multipage

我有一个包含3个“顶级”页面的用户表单(使用多页功能),然后是两个顶层页面中的四个嵌套页面。

嵌套多页用户形式

的屏幕截图

Screenshot of Nested Multipage Userform

在此示例中,页面标题和名称相同。因此,具有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")

在这个例子中,我只有一个userform,但如果我有两个userforms怎么办?此外,在上面的示例中,我假设必须指定两个页面条中的哪一个被引用。

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

1 个答案:

答案 0 :(得分:1)

在屏幕截图中,MultiPage1中的唯一页面是Page1,Page2和Page3。可以使用(例如)MultiPage1.Pages("Page1")来引用它们。 MultiPage1.Pages("Page4")不存在。

Page1包含MultiPage2,其页面为Page4和Page5。这些可以使用MultiPage2.Pages("Page4")进行引用。

您可以通过索引引用MultiPage控件中的页面,如MultiPage1.Pages(iPageIndex)中所示,其中iPageIndex从0变为页数减1。在屏幕截图中,MultiPage1.Pages(1)引用了Page2,和 MultiPage2.Pages(0)引用了第4页。