我在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