【发布时间】:2014-09-22 19:44:38
【问题描述】:
所以我正在创建一个收集数据并使用该数据生成报告的用户表单。有很多问题要问用户。具体来说,此表格上的测试题块是相同的。许多存在以便用户可以在表单上输入有关许多测试的信息。我对 VBA excel 比较陌生,我不知道如何为所有重复的问题块制作一个类模块。因此,我做了 8. 每个块中的问题都用一个数字命名,例如:TestType1_ComboBox、TestType2_ComboBox 等等。
是的,我意识到这是非常低效的,但是我在设置类模块时遇到了太多麻烦。
例如,我希望能够引用所有 X_ComboBoxes,这样我就可以通过循环轻松地向所有 X_ComboBoxes 添加项目。我做了一个集合,这样我就可以参考所有的 TestType_ComboBoxes 以提高效率。我计划对 8 个问题块中的所有控件进行此类参考。
问题:当我尝试引用集合中的对象时出现 424 对象引用错误。
''' create collections:
Public ttComboBox As Collection
Public ttAmountBlocked As Collection
Public ttgcFileName As Collection
Public ttsoiDate As Collection
Public ttsoiTime As Collection
Public ttReportUse As Collection
Sub ReportGenerationTool()
' set variables:
'...other code
' make organList an array list
Set organList = CreateObject("System.Collections.ArrayList")
'...more code
' set collections and add respective controls
Set ttComboBox = New Collection
With ttComboBox
.Add (Report_Form.TestType1_ComboBox)
.Add (Report_Form.TestType2_ComboBox)
.Add (Report_Form.TestType3_ComboBox)
.Add (Report_Form.TestType4_ComboBox)
.Add (Report_Form.TestType5_ComboBox)
.Add (Report_Form.TestType6_ComboBox)
.Add (Report_Form.TestType7_ComboBox)
.Add (Report_Form.TestType8_ComboBox)
End With
ttComboBox.Item(1).AddItem "Test"
'**^THIS IS WHERE I GET THE 424 ERROR**'
Set ttAmountBlocked = New Collection
'...similar set up as above
Set ttgcFileName = New Collection
'...similar set up as above
Set ttsoiDate = New Collection
'...similar set up as above
Set ttsoiTime = New Collection
'...similar set up as above
Set ttReportUse = New Collection
'...similar set up as above
' initialize report form
Call ReportForm_Initialize
' show report form
Report_Form.Show
End Sub
通常,我在 ReportForm_Initialize() 子程序中有这行代码:ttComboBox.Item(1).AddItem "Test"(以及其他类似的代码)。
本质上我想要这个: Report_Form.TestType1_ComboBox.AddItem "Test"
用这个: ttComboBox(1).AddItem "Test"
如果没有集合,我如何获得此功能?
【问题讨论】:
-
请帮忙,这让我很沮丧一段时间。谢谢:)
标签: excel vba user-interface collections controls