首页 > 解决方案 > 在范围内的值上构建组合框列表跳过空单元格

问题描述

我在工作表“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

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

标签: excelvba

解决方案


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

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

推荐阅读