2013-04-10 109 views
0

我想通过大量工作表循环,然后在每个工作表中填充列表框控件,并用我的代码填充它们。我使用下面的代码: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 

这似乎是不幸的,当我将列表框设置为对象。任何想法如何实现循环遍历不同工作表中的所有列表框并填充它们?

+0

你需要什么参考? 'MSForms.ListBox'给了我一个编译错误,“用户定义类型无法识别” – 2013-04-10 14:54:20

+0

无视,我找到了MS Forms库的引用。当我运行这个代码时,sh.OLEObjects是空的。你如何插入ListBox控件? – 2013-04-10 14:55:48

+2

在我看来,你需要将'Dim lst as MSForms.ListBox'改成'Dim lst as OLEObject',这就是所有... – 2013-04-10 14:57:32

回答

2

试试这个

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,因此类型不匹配。

+0

你打我3秒左右! – 2013-04-10 15:02:01

+0

感谢,似乎解决它。 – Dimitris 2013-04-10 15:02:05

+0

@菲利普:谢谢菲利普:) 3秒? 4分钟你的意思是? ;) – 2013-04-10 15:03:19

0

不能使用OBJ在您的来电PopulateSimplesince你知道这是一个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 
0

最简单的方法(从评论移动):

在我看来,你需要改变

Dim lst as MSForms.ListBox 

Dim lst as OLEObject 

这就是所有...