range.cells.count=1 vba时的组合框列表

range.cells.count=1 vba时的组合框列表,vba,excel,combobox,Vba,Excel,Combobox,当一个区域只有一个单元格时,我很难从该区域填充组合框 我有以下代码: Private Sub cboEquip_Change() Dim SourceData As Variant Dim col As Variant Dim rng As Range Set ws = Sheets("Details") On Error Resume Next 'Matches text from cboEquip to appropriate column in Details sheet col =

当一个区域只有一个单元格时,我很难从该区域填充组合框

我有以下代码:

Private Sub cboEquip_Change()

Dim SourceData As Variant
Dim col As Variant
Dim rng As Range

Set ws = Sheets("Details")

On Error Resume Next
'Matches text from cboEquip to appropriate column in Details sheet
col = WorksheetFunction.Match(Me.cboEquip.Value, ws.Range("1:1"), 0)

'Sets number of items in list
lr = ws.Cells(ws.Rows.Count, col).End(xlUp).Row


'Chooses correct range
Set rng = Sheets("Details").Range(Sheets("Details").Cells(2, col), Sheets("Details").Cells(lr, col))


'Changes cboUnit based on changes from cboEquip
SourceData = rng.Value

With Me.cboUnit
.Clear
.List = SourceData
.ListIndex = 0
End With
End Sub
该代码按设计工作,当范围cell.count>1时,根据另一个组合框的输入填充组合框列表,但是当它从的范围是单个单元格时,它不会填充列表

我已经尝试用一行来抵消该范围,以说明这一点,但是对于当前单元格计数大于1的所有范围,空单元格是一个选项


有没有办法只从一个单元格填充组合框?

我认为,因为SourceData不是一个只有一个值的数组,所以需要测试它。试试这个:

With Me.cboUnit
    .Clear
    If IsArray(sourceData) Then
        .List = sourceData
    Else
        .AddItem sourceData
    End If
   .ListIndex = 0
End With

这一逻辑是完美的,而且现在起作用了!只是一个小小的改变-我没有使用iArray,而是使用if.rng.cells.count>1