该代码昨天运行良好,但是现在我收到类型不匹配的运行时错误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
现在只有一个条目时,有人可以如何格式化代码吗?
谢谢
答案 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
(当然,您可以自行决定是否要在添加项目之前继续检查错误)