我有一个用户表单(Userform1),其中有 4 个列表框(ListBox1 到 4),其中都有条目。表单用户选择列表中的条目,然后单击命令按钮 (CommandButton_1)。然后,VBA 宏将每个列表框中的值写入 Excel 日志表上的单元格中。用项目填充列表框并将结果写入电子表格的代码正在运行。
但是,我希望能够检查以确保所有列表框都有选择。在写入数据之前必须始终填写它们,否则我们在以后的分析过程中会丢失数据完整性。
我已经弄清楚如何检查“individual”列表框是否没有选择,但我想将其概括为能够解释任意数量的列表框。到目前为止我已经尝试过:
'Attempt 1
For Each Control In Me.Controls
If Controls.Name Like "Listbox*" Then
If Controls.Value <> "" Then
Else: MsgBox ("You must select a value for every list.")
GoTo ERROR_ENDSUB
End If
End If
Next
A1 给了我错误 438:Obect 不支持此属性或方法(如果 Controls.Name 行)。
'Attempt 2
Dim sh as Worksheet
Set sh = ThisWorkbook.Sheets("Downtime")
For i = 1 To 4
If "sh.listbox" & i & ".value" <> "" Then
Else: MsgBox ("You must select a value for every list.")
GoTo ERROR_ENDSUB
End If
Next
A2 不起作用,我可以将列表留空,它仍然会在没有 Msgbox 的情况下写入数据。
'Attempt 3
Dim LB as ListBox
For i = 1 To 4
Set LB = ListBoxes("Listbox" & i)
If LB.Value <> "" Then
Else: MsgBox ("You must select a value for every list.")
GoTo ERROR_ENDSUB
End If
Next
A3 给出编译错误:Sub 或函数未定义(突出显示 Listboxes())。
如果我不是 100% 熟悉函数/方法的 VBA 对象模型,请原谅我。我是一名化学工程师,因擅长 excel(公式方面)而享有盛誉,我的公司一直给我分配越来越大的电子表格自动化任务。最终它们变得太大了,现在我在过去一周左右的时间里一直在尝试在没有编码经验的情况下学习 VBA。
Private Sub UserForm_Activate()
Dim con As Control
For Each con In Me.Controls
If TypeName(con) = "ListBox" Then
Debug.Print "Found listbox: " & con.Name
End If
Next con
End Sub