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 

这就是全部…