遍历用户表单中的所有组合框并使用名称进行验证并使它们可见

Posted

技术标签:

【中文标题】遍历用户表单中的所有组合框并使用名称进行验证并使它们可见【英文标题】:loop through all comboboxes in userform and validate with name and make them visible 【发布时间】:2022-01-19 12:16:24 【问题描述】:

我有一个用户表单,其中页面然后在一个页面上包含很多组合框,所有组合框的名称都根据它们的位置有一个模式,例如在第一行中,我有 3 个组合框,它们的名称是: AO11、AO12、AO13

第二行有 04 个组合框,名称如下

AO21、AO22、AO23、AO24

第三行有 04 个具有以下名称的组合框

AO31、AO32、AO33、AO34

以此类推,直到 12~15 个组合框

X 代表行号,当它以 X=1 开始时,因为第一行总是可见的。

一旦用户按下 AddNewCMD,它应该使用以下代码显示下一行组合框:

Private Sub AddNewCMD_Click()
    
    If X = 2 Then
        
        Me.AO21.Visible = True
        Me.AO22.Visible = True
        Me.AO23.Visible = True
        Me.AO24.Visible = True
        
        X = X + 1
        
    ElseIf X = 3 Then
                    
        Me.AO31.Visible = True
        Me.AO32.Visible = True
        Me.AO33.Visible = True
        Me.AO34.Visible = True
    
        X = X + 1
        
    End If

End Sub

在 AO21 中 2代表行号 1 代表第二行的第一个组合

但是我意识到这将是很长的代码,就好像我在其中添加更多行一样,因此我正在寻找一种可以循环遍历每个组合框并使用其名称验证 x 并使它们可见的方法?

隐藏组合框也是如此。

【问题讨论】:

这个网站可能有帮助:ozgrid.com/VBA/control-loop.htm 不清楚你想要什么...有一个AddNewCMD 按钮吗?如果是这样,基于什么添加/显示特定的“组合框行”?如果每一行都包含这样一个按钮,它的名称是否包含某种类似的后缀来确定其在现有行中的位置?可以从表单上的任何位置获取使用的 X 吗? 使用控件,这样你就可以用x变量定义名字,例如Me.Controls("AO" & X & "1").Visible = True如果找不到名字就会出错。 @FaneDuru 是的!一个用于添加组合框行的按钮和一个用于删除组合框行 x=1 或 x=2 的按钮我不确定是否会在用户窗体初始化时出现 我听不懂...您说用户表单将只有第一个组合行可见。真的吗?那么,您想让 next 组合行在每次单击此类按钮后可见吗? 【参考方案1】:

请复制 userForm 代码模块中的下一个代码:

Option Explicit

Private nextRow As Long

Private Sub AddNewCMD_Click()
    Dim i As Long, ctrl As MSForms.Control, boolVis As Boolean
    If nextRow = 0 Then
        nextRow = 2
    Else
        nextRow = nextRow + 1
    End If
    Debug.Print nextRow
    For i = 0 To Me.MultiPage1.Pages(0).Controls.count - 1
        Set ctrl = Me.MultiPage1.Pages(0).Controls(i)
        If TypeOf ctrl Is MSForms.ComboBox Then
            If CLng(Right(ctrl.Name, Len(ctrl.Name) - 2)) > 13 Then
                 Debug.Print ctrl.Name, ctrl.Visible
                 If CLng(Mid(ctrl.Name, 3, 1)) = nextRow Then
                    ctrl.Visible = True: boolVis = True
                 End If
            End If
        End If
   Next i
   If Not boolVis Then MsgBox "The row " & nextRow & " does not exist..."
End Sub

单击AddNewCMD 按钮将使下一个组合行可见。当现有行全部可见时,将显示一条消息,指出没有任何可用行。

你没有回答我的澄清问题...但是如果只有一个这样的组合行应该是可见的(除了第一个,或者包括),我可以创建一个函数来确定它,但只有当你根据要进行的操作提供逻辑算法。

【讨论】:

@Ibn e Ashiq 您没有抽出时间来测试上述建议吗?如果经过测试,它没有按您的意愿工作吗?如果不是,你希望它如何对抗它? 亲爱的!我试图自己解决它,还有一些方法,它真的很短而且很快。我将根据我的建议更新我的问题。感谢您的时间和精力。

以上是关于遍历用户表单中的所有组合框并使用名称进行验证并使它们可见的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 语句中引用组合框并在 VBA 中运行该语句

Django中的Form表单验证

表单验证插件——validate

MS access 2007 使用组合框填充图片

Jquery+H5验证数据(不是表单验证啊 )

GetOrgChart:如何对齐***框并使组织结构图向下增长