Vba 循环遍历控件名称并隐藏帧中包含正确编号的所有控件

Vba 循环遍历控件名称并隐藏帧中包含正确编号的所有控件,vba,ms-word,Vba,Ms Word,我要做的是在Word用户窗体上,如果我在组合框(cb_CountCohromes)(选项为1-10)中选择一个数字,那么任何包含该数字+1的控件(选项按钮或文本框)(因此,如果我选择5,则具有6-10的控件)都将不可见 话虽如此,我确实让它发挥了作用,但我知道它没有效率。 下面是开始,但我意识到,对于每种情况,必须再看到10组下面的内容乘以10个不同的If语句。有没有一种方法可以说If cb_Countcohrts=“1”找到此框架中不包含队列1的所有控件并将其隐藏…If cb_CountCoh

我要做的是在Word用户窗体上,如果我在组合框(cb_CountCohromes)(选项为1-10)中选择一个数字,那么任何包含该数字+1的控件(选项按钮或文本框)(因此,如果我选择5,则具有6-10的控件)都将不可见

话虽如此,我确实让它发挥了作用,但我知道它没有效率。
下面是开始,但我意识到,对于每种情况,必须再看到10组下面的内容乘以10个不同的If语句。有没有一种方法可以说If cb_Countcohrts=“1”找到此框架中不包含队列1的所有控件并将其隐藏…If cb_CountCohrots=“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

未经测试,但这应该有效:

Dim c As Control

For Each c In Me.Controls
    If InStr(TypeName(c),"cohort") Then
        c.Visible = False
    End If
Next
大概是这样的:

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\u countcourts\u Change()
暗v一样长,我一样长
v=CLng(cb_CountCohromes.值)
对于i=2到10

控件(“txt_队列”&i).Visible=(我知道我在其他地方看到了这个…(谢谢!)我想我还是个新手,我不知道如何把它串起来,因为我会为cb_CountCoquest做一个if语句,看看它是否等于一个数字1-10,然后再做一个Instr,看看它是否包含一个关键字/数字在字符串中,然后就不得不隐藏高于该数字的所有内容。我想得太多了吗?有什么方法可以做到这一点吗e如果txt_队列是名称的一部分,它将隐藏控件…例如,我有一个txt_队列1文本框和一个txt_队列1_付费1…有没有一种方法可以用一行隐藏两者?
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