Excel VBA: 根据组合框选择隐藏页面
Excel VBA: Hide Pages based on Combobox selection
我有一个具有以下值的组合框:"none"、“1”、“2”、“3”和“4”。我想让 Combobox 显示的页数可见。我怎样才能做到这一点?即 combobox = 3 - 页面 1、2 和 3 变得可见。
终于明白了
Private Sub ComboBox1_Change()
Select Case ComboBox1.Text
Case "none"
Me.MultiPage2(0).Visible = False
Me.MultiPage2(1).Visible = False
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "1"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = False
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "2"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "3"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = True
Me.MultiPage2(3).Visible = False
Case "4"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = True
Me.MultiPage2(3).Visible = True
End Select
End Sub
备选方案:
Private Sub ComboBox1_Change() ' Could also use a number spinner to control user input
Dim pgCount as Short
' Some data validation
pgCount = IIf(isnumeric(ComboBox1.Text),CShort(ComboBox1.Text),0)
pgcount = iif(pgCount >= 0 and pgCount < 5, pgCount,0)
Me.MultiPage2(0).Visible = pgCount > 0
Me.MultiPage2(1).Visible = pgCount > 1
Me.MultiPage2(2).Visible = pgCount > 2
Me.MultiPage2(3).Visible = pgCount > 3
End Sub
用户输入的数据验证始终很重要 - 您如何处理错误的输入?一个更好的问题是:首先如何防止错误输入。
一点解释:
- 数据验证首先检查用户是否输入了代表数字的东西
- 如果输入类似于数字,则将其转换为数字。在这种情况下,将其转换为 Short 会删除用户可能输入的所有小数位。
- 如果输入与数字不同,请改用 0(软失败)
- 如果转换后的数字在 0 ("None") 和 4 之间,则 OK,否则将其设置为 0(另一个软失败)。
- [数据转换结束]
- 接下来的四行使用简单的布尔逻辑来确定是否应显示选项卡。我用你的答案代码来确定逻辑。
我有一个具有以下值的组合框:"none"、“1”、“2”、“3”和“4”。我想让 Combobox 显示的页数可见。我怎样才能做到这一点?即 combobox = 3 - 页面 1、2 和 3 变得可见。
终于明白了
Private Sub ComboBox1_Change()
Select Case ComboBox1.Text
Case "none"
Me.MultiPage2(0).Visible = False
Me.MultiPage2(1).Visible = False
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "1"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = False
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "2"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = False
Me.MultiPage2(3).Visible = False
Case "3"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = True
Me.MultiPage2(3).Visible = False
Case "4"
Me.MultiPage2(0).Visible = True
Me.MultiPage2(1).Visible = True
Me.MultiPage2(2).Visible = True
Me.MultiPage2(3).Visible = True
End Select
End Sub
备选方案:
Private Sub ComboBox1_Change() ' Could also use a number spinner to control user input
Dim pgCount as Short
' Some data validation
pgCount = IIf(isnumeric(ComboBox1.Text),CShort(ComboBox1.Text),0)
pgcount = iif(pgCount >= 0 and pgCount < 5, pgCount,0)
Me.MultiPage2(0).Visible = pgCount > 0
Me.MultiPage2(1).Visible = pgCount > 1
Me.MultiPage2(2).Visible = pgCount > 2
Me.MultiPage2(3).Visible = pgCount > 3
End Sub
用户输入的数据验证始终很重要 - 您如何处理错误的输入?一个更好的问题是:首先如何防止错误输入。
一点解释:
- 数据验证首先检查用户是否输入了代表数字的东西
- 如果输入类似于数字,则将其转换为数字。在这种情况下,将其转换为 Short 会删除用户可能输入的所有小数位。
- 如果输入与数字不同,请改用 0(软失败)
- 如果转换后的数字在 0 ("None") 和 4 之间,则 OK,否则将其设置为 0(另一个软失败)。
- [数据转换结束]
- 接下来的四行使用简单的布尔逻辑来确定是否应显示选项卡。我用你的答案代码来确定逻辑。