遍历用户表单中的所有组合框并使用名称进行验证并使它们可见
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 您没有抽出时间来测试上述建议吗?如果经过测试,它没有按您的意愿工作吗?如果不是,你希望它如何对抗它? 亲爱的!我试图自己解决它,还有一些方法,它真的很短而且很快。我将根据我的建议更新我的问题。感谢您的时间和精力。以上是关于遍历用户表单中的所有组合框并使用名称进行验证并使它们可见的主要内容,如果未能解决你的问题,请参考以下文章