【问题标题】:Excel: Set comboboxes 3-8 .visible to false if ComboBox 1 is emptyExcel:如果 ComboBox 1 为空,则将组合框 3-8 .visible 设置为 false
【发布时间】:2020-05-24 04:33:03
【问题描述】:

我有一个带有 ComboBoxes 1-8 的用户窗体,每个用户窗体在 UserForm_Activate 时都会在 ws 中的指定单元格中拾取文本。如果 ComboBox1.Value = "",我已将 ComboBoxes 2-8 设置为 .Visible=False

有没有一种方法可以使用缩写代码为每个 ComboBox 设置 .Visible=False 而无需单独列出每个 ComboBox?我在下面添加了我现在使用的内容,但我经常创建这样的表单,并且宁愿使用“Dim i as Integer / For i =”类型的东西,而不是我可以在需要的地方复制和粘贴。提前谢谢!

If ComboBox1.Value = "" Then
ComboBox2.Visible = False
ComboBox3.Visible = False
ComboBox4.Visible = False
ComboBox5.Visible = False
ComboBox6.Visible = False
ComboBox7.Visible = False
ComboBox8.Visible = False

【问题讨论】:

  • 发表了答案;顺便说一句,使用 Long 而不是 Integer 没有区别(特别是使用行或列索引,你是安全的:) @

标签: combobox userform shortcut


【解决方案1】:

控件的间接引用

通过Controls() 使用间接引用并尝试

Dim i As Long, current As Long
current = 1             ' << change to the combobox to be excepted
For i = 1 to 8          ' loop through all comboboxes
    Me.Controls("ComboBox" & i).Visible = False
Next i
Me.Controls("ComboBox" & current).Visible = True

【讨论】:

  • 谢谢你——它工作得很好!有什么方法可以将其更改为仅影响某些 CB 的情况?比如说,每隔一个,还是每隔一个,等等?
  • 不客气,@LorenScholes。 - 关于您的问题:当然可以,这取决于您的命名约定,例如从 CB1, CB4, CB7, ... 到 CBn。在这种情况下,您可以 a) 在循环中添加 For i = 1 to 8 Step 3 条件或 b) 在 For-Next 循环中执行检查,例如通过If (i - 1) Mod 3 = 0 Then ...End If;只是玩测试:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2018-05-09
相关资源
最近更新 更多