Excel VBA – 通过ListBox控件循环
我试图循环通过一些工作表,然后在每个工作表中的列表框控件,并填充他们与我的代码。 我正在使用下面的代码:
Dim sh As Worksheet Dim obj As OLEObject Dim lst As MSForms.ListBox Dim idx As Long For idx = 1 To ThisWorkbook.Worksheets.Count Set sh = ThisWorkbook.Worksheets(idx) For Each obj In sh.OLEObjects If obj.progID = "Forms.ListBox.1" Then Set lst = obj If (lst.Name = "lst1") Then Call PopulateSimple(lst, "Table1") End If End If Next Next idx
当我将列表框设置为对象时,这似乎不幸地失败。 任何想法如何我可以实现在不同的工作表中的所有列表框循环,然后填充它们?
尝试这个
Sub Sample() Dim sh As Worksheet Dim obj As OLEObject Dim idx As Long For idx = 1 To ThisWorkbook.Worksheets.Count Set sh = ThisWorkbook.Worksheets(idx) For Each obj In sh.OLEObjects If TypeOf obj.Object Is MSForms.ListBox Then If (obj.Name = "lst1") Then Call PopulateSimple(obj, "Table1") End If End If Next Next idx End Sub
说明 :你正在得到这个错误,因为obj被声明为OLEObject
而lst是MSForms.ListBox
,因此types不匹配。
你不能在调用PopulateSimples的时候使用obj,因为你知道它是一个ListBox:
Dim sh As Worksheet Dim obj As OLEObject Dim lst As MSForms.ListBox Dim idx As Long For idx = 1 To ThisWorkbook.Worksheets.Count Set sh = ThisWorkbook.Worksheets(idx) For Each obj In sh.OLEObjects If obj.progID = "Forms.ListBox.1" Then 'Set lst = obj If (obj.Name = "lst1") Then Call PopulateSimple(obj, "Table1") End If End If Next Next idx
最简单的方法(从评论移动):
在我看来,你需要改变
Dim lst as MSForms.ListBox
成
Dim lst as OLEObject
这就是全部…