将单个值存储到动态数组中:类型不匹配

时间:2016-04-26 12:38:58

标签: excel excel-vba vba

Dim Sh_Temp  As Worksheet
Set Sh_Temp = ThisWorkbook.Sheets("Temp")
lRow = Sh_Temp.Cells(Rows.Count, 1).End(xlUp).Row
ReDim vArray(lRow - 1)   
vArray = Sh_Temp.Range("A2:A" & lRow).Value2  ' Exclude Header Value in A1

当工作表中的值超过1时,上面的代码非常有效。 但是当只有一个值时,例如

Ref. No.
2.1.a

无法复制到数组中会出错

  

'输入不匹配'

1 个答案:

答案 0 :(得分:1)

ReDim vArray(lRow - 1)的需求在哪里?在vArray = Sh_Te...,将自动设置边界。此外,如果只有一个值,那么它只返回一个值而不是一个数组。但是使用ReDim vArray(lRow - 1),您尝试在没有位置的数组中插入值 您可以选择像这样使用它:

Dim Sh_Temp  As Worksheet
Set Sh_Temp = ThisWorkbook.Sheets("Temp")
lRow = Sh_Temp.Cells(Rows.Count, 1).End(xlUp).Row
Dim vArray As Variant
vArray = Sh_Temp.Range("A2:A" & lRow).Value2

如果只返回一个值,那么vArray将不是数组,或者这样做:

Dim Sh_Temp As Worksheet, lRow As Long, vArray As Variant
Set Sh_Temp = ThisWorkbook.Sheets("Temp")
lRow = Sh_Temp.Cells(Rows.Count, 1).End(xlUp).Row
If lRow <= 2 Then
  vArray = Array()
  ReDim vArray(1 To 1, 1 To 1)
  vArray(1, 1) = Sh_Temp.Range("A2").Value2
Else
  vArray = Sh_Temp.Range("A2:A" & lRow).Value2
End If

然后vArray无论如何都是2D数组。