2016-04-26 84 views
0
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 

不能复制到阵列它提供了一个错误

'类型不匹配'

+0

a Range是一个二维数组,如下所示:'ReDim vArray(1,lRow - 1)'和'lrow-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不管是什么。