我正在尝试做的是在 Word 用户窗体上,如果我在组合框 (cb_CountCohorts) 中选择一个数字(选项为 1-10),则任何控件(选项按钮或包含该数字 +1 的文本框(因此,如果我选择 5,那些有 6-10 的控件)将不可见。
话虽如此,我确实让它工作了,但我知道它效率不高。
下面是开头,但我意识到对于每种情况,您必须在下面看到 10 多组内容乘以 10 个不同的 If 语句。 有没有办法说,如果 cb_Countcohrts ="1" 找到此框架中不包含群组 1 的所有控件并将其隐藏......如果cb_countcohorts ="5",则隐藏包含队列 6、7、8、9、10 的所有内容? 提前感谢所有和任何帮助
Private Sub cb_CountCohorts_Change()
If cb_CountCohorts = "1" Then
txt_cohort1.Visible = True
txt_cohort2.Visible = False
txt_cohort3.Visible = False
txt_cohort4.Visible = False
txt_cohort5.Visible = False
txt_cohort6.Visible = False
txt_cohort7.Visible = False
txt_cohort8.Visible = False
txt_cohort9.Visible = False
txt_cohort10.Visible = False
我也试过这个,但它似乎也没有像我想要的那样工作
Private Sub cb_CountCohorts_Change()
For i = 2 To 10
Set VarText = frm_master.Controls("txt_cohort" & i)
If cb_CountCohorts.Value > VarText.Value Then
VarText.Visible = False
End If
Next i
End Sub
像这样:
Private Sub cb_CountCohorts_Change()
Dim v As Long, i As Long
v = CLng(cb_CountCohorts.Value)
For i = 2 To 10
Me.Controls("txt_cohort" & i).Visible = (i <= v)
'any other controls here....
Next i
End Sub
如果你想要所有控件的通用内容(假设一致的命名约定) -
Private Sub cb_CountCohorts_Change()
Dim v As Long, c, i As Long, arr
v = CLng(cb_CountCohorts.Value)
For Each c In Me.Controls
If c.Name Like "txt_cohort#*" Then
arr = Split(c.Name, "_")
i = CLng(Replace(arr(1), "txt_cohort", ""))
c.Visible = (i <= v)
End If
Next c
End Sub
。基本上是从罗伯特的建议扩展而来
未经测试,但这应该有效:
Dim c As Control
For Each c In Me.Controls
If InStr(TypeName(c),"cohort") Then
c.Visible = False
End If
Next