根据范围中的值构建组合框列表跳过空单元格

时间:2019-05-03 17:17:04

标签: excel vba

我在工作表“ MAIN”上有组合框。组合框的名称为SignatureBox。我想基于A55:A80范围内的工作表“联系数据库”上的值构建组合框列表。在A55:A80范围内,我有类似于=IF(C7="";"";C7)的公式,因此它们返回的是我想跳过的空单元格,并且仅使用可用值构建列表。由于某种原因,我当前的代码始终无法正常工作。在第二次单击组合框列表时,混乱了,所有值都翻了一番。可能是什么问题?

它似乎可以与Worksheet_Change一起使用,但是随后我必须在工作表Contact database上进行更改。 Worksheet_Calculate

弄得一团糟
Private Sub Worksheet_Change(ByVal Target As Range)
Dim RngCom As Range
ThisWorkbook.Sheets("MAIN").SignatureBox.Clear
With ThisWorkbook.Sheets("Contact database")
    For Each RngCom In .Range(.Range("A55"), .Range("A" & .Rows.Count).End(xlUp))
        If RngCom.Value <> vbNullString Then ThisWorkbook.Sheets("MAIN").SignatureBox.AddItem RngCom.Value
    Next RngCom
End With
End Sub

在组合框属性中,我将LinckedCell设置为'Contact database'!R4

1 个答案:

答案 0 :(得分:1)

这将进入工作表模块中的“联系人数据库”工作表:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim c As Range, sb As Object

    'any changes in Col C ?
    If Not Application.Intersect(Target, Me.Columns(3)) Is Nothing Then

        Set sb = ThisWorkbook.Sheets("MAIN").SignatureBox
        sb.Clear

        'add non-blank values
        For Each c In me.Range(me.Range("A55"), me.Range("A" & me.Rows.Count).End(xlUp))
            If Len(c.Value)>0 then sb.AddItem c.Value
        Next c

    End If

End Sub