循环遍历控件名称并隐藏框架内包含正确编号的所有控件



我正在尝试做的是在 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

相关内容

最新更新