2015-12-02 76 views
1

我认为这很简单,但无论出于何种原因,我的组合框总是空的,我不知道为什么!在B列中,我从单元格B3的文本向下,并希望此列表填充我的组合框(称为ComboBox1)。 B列中的某些单元格是空的,我不希望这些在下拉列表,所以这是我的代码有:用范围填充组合框并移除空格

Private Sub CompanyList() 
Dim c As Range 
With Worksheets("Database") 
    For Each c In Worksheets("Database").Range("B3", .Range("B" & Rows.Count).End(xlUp)) 
     If c.Value <> "" Then ComboBox1.AddItem c.Value 
    Next c 
End With 
End Sub 

我单被称为数据库,该ActiveX组合框是在同一张纸上,这就是所谓ComboBox1。我在哪里错了?

UPDATE

,使其运行每当我更新细胞,使

Private Sub Worksheet_Change(ByVal Target As Range) 

但是,现在当我更新细胞时,它会增加整个B柱的我已经改变了代码再次到组合框。它不会添加空白单元格,而是从空白单元格的下面添加好值的值,但每当我进行更改时,它都会添加两次。

虽然考虑它,我不知道为什么我认为不然。但是,如果我更改列表中的公司名称,我仍然需要组合框在实时更新。

+0

你将断点与'If'网上看到,如果你进入它? – R3uK

+1

如果我在If行上设置了一个断点,然后遍历代码,它将继续添加值直到一个空单元格,然后重复添加这些值...所以我得到值1,值2,值3,值1,值2,值3等,而不是值1,值2,值3,值4等。 – Chris

回答

0

围绕With陈述一些修改,以正确界定范围:

Private Sub CompanyList() 
Dim c As Range 
ComboBox1.Clear 
With Worksheets("Database") 
    For Each c In .Range(.Range("B3"), .Range("B" & .Rows.Count).End(xlUp)) 
     If c.Value <> vbNullString Then ComboBox1.AddItem c.Value 
    Next c 
End With 
End Sub 
+0

感谢您的回应,但它仍然没有填充列表。我没有得到任何错误或任何东西,它只是不填充组合框。 – Chris

+0

运行代码时,它现在将组合框填充到空单元格,但是,我仍然需要填充该空格的空单元格下的值。它并不是现场更新。 – Chris

+0

奇怪的是,它在一个空单元格后停下来......当你使用AddItem方法时,它不应该有任何问题......我会环顾一下,看看是否有解释! – R3uK