在代码中输入不匹配项以填充组合框

时间:2018-11-13 09:38:49

标签: excel vba

该代码昨天运行良好,但是现在我收到类型不匹配的运行时错误13。我试图研究此问题,但对vba的理解不足以解决它。

我今天更改的只是一些我现在撤消的工作表名称,但仍然无法使用。

Dim WKB As Workbook
Dim SHT_data_WORKERS As Worksheet
Set WKB = ActiveWorkbook
Set SHT_data_WORKERS = WKB.Sheets("data_WORKERS")
Dim vArr As Variant
Dim i As Integer
vArr = WorksheetFunction.Transpose(SHT_data_WORKERS.Range("B2:B" & SHT_data_WORKERS.Range("B" & Rows.Count).End(xlUp).Row).Value)
With form_addTask.form_addTask_Worker
    .Clear
    For i = LBound(vArr) To UBound(vArr)
        .AddItem vArr(i)
    Next i
End With

编辑- 我已将问题缩小到下一行;

vArr = WorksheetFunction.Transpose(SHT_data_WORKERS.Range("B2:B" & SHT_data_WORKERS.Range("B" & Rows.Count).End(xlUp).Row).Value)

在SHT_data_WORKERS页面上填充两行或更多行时,我没有任何错误。

这是SHT_data_WORKERS页面的结构,在发生错误时从中提取列表;

ID | Name | Role
1    Chris Engineer

但是当输入两行时它会起作用;

ID | Name | Role
1    Chris Engineer
2    Test  Engineer

现在只有一个条目时,有人可以如何格式化代码吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您的工作表中可能包含无效的值,例如#N/A。请注意,这不是字符串,Excel会使用自己的vartype处理此类错误值。

在添加值之前检查该值是否正确

    If Not IsError(vArr(i)) Then
        .AddItem vArr(i)
    End If

更新(在您向问题添加了更多信息之后):
如果您的数据仅包含一行,则transpose将仅获得一个单元格作为参数(B2:B2)。在这种情况下,您将得到一个结果值,而不是一个数组。

因此将您的代码更改为

   With form_addTask.form_addTask_Worker
        .Clear
        If IsArray(vArr) Then
            For i = LBound(vArr) To UBound(vArr)
                If Not IsError(vArr(i)) Then .AddItem vArr(i)
            Next i
        Else
            If Not IsError(vArr) Then .AddItem vArr
        End If
    End With

(当然,您可以自行决定是否要在添加项目之前继续检查错误)