2015-12-22 15 views
1

當試圖將簡單的一列複製到數組中並返回到另一列時,我得到「類型不匹配」。這裏是我的代碼(只是相關位):我在Excel和VBA中得到一個數組「類型不匹配」

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 

我試圖從問題的行省略了最後。價值 - 仍然沒有。

+0

沒有錯誤發生在哪一行? – BruceWayne

+0

第15行,同時考慮到評論。我嘗試給數組賦值的範圍「srcYears = srcWkb.Worksheets(c)...」 –

+0

不要'ReDim'數組? –

回答

4

如果你這樣做Dim srcYears() As Variant,那麼你的代碼將工作。我不確定爲什麼你不能聲明它是一個強類型數組(例如,As Double),但我猜測範圍的.Value可以表示爲一個數組,但不能這樣處理,因爲.Value數組不一定是那種數據類型,並且不會被賦值強制轉換爲該類型。我的猜測是,一個Range.Value總是 Variant類型,因爲範圍可以包含字符串,數字或錯誤值。

您可以從一個範圍直接分配到另一個:

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 
+0

我在srcYears.Value(自下而上的第三行)上收到編譯錯誤「Invalid qualifier」錯誤 –

+0

啊,我的不好。 'Dim srcYears as Range',我會修改。 –