我在Excel和VBA中得到一个数组“types不匹配”

当我尝试复制一个简单的列到一个数组,并返回到另一列时,我得到“types不匹配”。 这是我的代码(只是相关位):

Sub CopyRangesViaArrays() 'Declaring variables Dim srcWkb As Workbook Dim destWkb As Workbook Dim srcYears() As Double Dim destYears As Range Dim L As Long Set srcWkb = Workbooks("Arrivals.xlsx") Set destWkb = Workbooks("OvernightStays.xlsm") L = srcWkb.Worksheets.Count z = 0 'Looping through src Workbook sheets For C = 1 To L ReDim srcYears(26, 0) srcYears = srcWkb.Worksheets(C).Range("A3:A28") Set destYears = destWkb.Worksheets(10).Range("A2").Offset(z, 0) destYears.Value = srcYears z = z + 26 Next C 

正如你可能看到的,我也遇到了将数据库中的目标范围抵消的问题(这里有43个表,所以会有43个不同的srcRanges被占用到一个数组中并写入到destRange中)。

非常感谢!

编辑:我也试过这个按照说明

 Dim srcYears As Range Dim destYears As Range 

在这一行打破:

 destYears.Resize(26, 1).Value = srcYears.Value 

我试图从有问题的一行中省略最后一个值 – 仍然没有。

如果你做Dim srcYears() As Variant ,那么你的代码将工作。 我不确定为什么你不能声明它是一个强types的数组(例如, As Double ),但我猜测范围的.Value ,可以表示为一个数组,不能用这种方式处理,因为.Value数组不一定是那个数据types,并且不会被一个赋值强制转换为该types。 我的猜测是一个Range.Value 始终是Varianttypes,因为一个范围可以包含string,数字或错误值。

您可以直接从一个范围分配到另一个范围:

  Dim srcYears as Range For C = 1 To L '## not needed: ReDim srcYears(26, 0) Set srcYears = srcWkb.Worksheets(C).Range("A3:A28") Set destYears = destWkb.Worksheets(10).Range("A2").Offset(z, 0) '## resize the destination range to ensure it _ accommodates the source Range, then assign directly. destYears.Resize(26,1).Value = srcYears.Value z = z + 26 Next C