【问题标题】:VBA - Hide pages (tabs) in a frame based on Combobox selectionVBA - 基于组合框选择在框架中隐藏页面(选项卡)
【发布时间】:2017-10-02 23:21:36
【问题描述】:

我编写了 VBA 代码,以根据组合框选择显示隐藏选项卡。组合框中有七个选项,每个选项对应于框架中的七个隐藏选项卡。

Private Sub CBO_EntryType_Change()

Dim iPage As Integer

If Me.CBO_EntryType.Value = "Abstracts" Then
    iPage = 1
ElseIf CBO_EntryType.Value = "Awards" Then
    iPage = 2
ElseIf CBO_EntryType.Value = "Career Fairs" Then
    iPage = 3
ElseIf CBO_EntryType.Value = "Editorials" Then
    iPage = 4
ElseIf CBO_EntryType.Value = "Rankings" Then
    iPage = 5
ElseIf CBO_EntryType.Value = "Tradeshows" Then
    iPage = 6
ElseIf CBO_EntryType.Value = "Social Media" Then
    iPage = 7
End If

Me.MultiPage1.Pages(iPage).Visible = True
End Sub

我似乎遇到的问题是,如何确保隐藏其他选项卡?由于人们只能单击组合框中的一个选项,但他们可能会错误地单击一个,然后单击正确的一个。根据组合框中的选定项目,只有一个选项卡应可见。其他六个应该隐藏。

我想在 sub 的末尾有一个 For-Each-Next 循环,它会禁用任何与 iPage 变量不匹配的选项卡,但我很难弄清楚如何处理 For 中的框架和页面每个 Next 循环。变量声明是什么?

【问题讨论】:

  • for i = 1 to 7 ... .visible = (i = iPage) .... 注意:i = iPage 比较结果为真/假
  • ******注意!!! .... mutiPage 控件中的选项卡索引从零开始.....第一个是MultiPage1.Pages(0),因此循环需要为for i = 0 to 6,您需要调整 if/then/else 代码
  • 谢谢!今天测试所有解决方案。我会回复你的。

标签: excel vba combobox multipage


【解决方案1】:

未经测试,因此可能需要稍作调整...

Private Sub CBO_EntryType_Change()

    Dim iPage, arrPages, x As Long
    arrPages = Array("Abstracts", "Awards", "Career Fairs", "Editorials", _
                      "Rankings", "Tradeshows", "Social Media")

    'find the index in the array...
    iPage = Application.Match(Me.CBO_EntryType.Value, arrPages, 0)

    'if got a match then loop over the pages and show/hide
    If Not IsError(iPage) Then
        For x = 0 To Me.MultiPage1.Pages.Count-1
            Me.MultiPage1.Pages(x).Visible = ((x+1) = iPage)
        Next x
    End If

End Sub

编辑 - @jstola 和我的想法相似...

【讨论】:

  • 刚刚检查过 .... 页面索引是从零开始的 ..... 你能说“VBA 实现中的不一致”吗? (使用罗杰斯先生的声音)....我知道你可以....大声笑
  • 谢谢!今天测试所有解决方案。我会回复你的。
  • 在不同程度上,每个人的回答都有效。我选择了这个作为最佳答案,因为它使以后添加额外的选项卡更容易处理。此外,我没有说的过程的一部分是有两个选项卡需要不断打开。此代码使插入代码以激活其他两个选项卡变得非常容易。非常感谢您的帮助!
【解决方案2】:

以下代码假设 MultipagePagesCaption 反映了CBO_EntryType 中的列表:

Private Sub CBO_EntryType_Change()
    Dim iPage As Long
    For iPage = 0 To Me.MultiPage1.Pages.Count - 1
        With Me.MultiPage1.Pages(iPage)
            .Visible = (.Caption = CBO_EntryType.Value)
        End With
    Next
End Sub

【讨论】:

  • 谢谢!今天测试所有解决方案。我会回复你的。
猜你喜欢
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2019-03-29
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多