2015-08-14 40 views
0

我想創建一個函數,用於複製工作表中的某些excel範圍,並將這些範圍粘貼到「母文件」中。現在在for循環中複製和粘貼信息

,我使用此代碼嘗試:

Sub ranges() 

    Dim month As Variant 
    Dim months As Variant 

    months = Array("V01 DEN HAAG", "V02 AMSTERDAM") 

    Dim destinationRange As Excel.range 
    Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

    For Each month In months 

     Dim sourceRange As Excel.range 
     Set sourceRange = Sheets(month).range("H7", range("H7").End(xlToRight)) 

     Call sourceRange.Copy 
     Call destinationRange.PasteSpecial 

    Next month 

End Sub 

但是,我得到一個應用程序定義或對象定義的錯誤。有什麼錯誤的想法?謝謝!

+0

這行給你錯誤?你可以說? –

+0

Set sourceRange = Sheets(month).Range(「H7」)。End(xlToRight) –

回答

1

添加到mielk的anwser問題的代碼行:

Set sourceRange = Sheets(month).range("H7", range("H7").End(xlToRight)) 

這是因爲,如果你是從多個工作表的數據收集和使用range("H7").End(xlToRight將本次搜索的工作表上。因此,只有在正確的表單上才能找到正確的範圍。

通過使用以下代碼:

Set sourceRange = Sheets(month).Range("H7", Sheets(month).Range("H7").End(xlToRight)) 

它將工作無論哪個表處於活動狀態的那一刻。 另一除了是你可以複製和粘貼在1個代碼行:

sourceRange.Copy Destination:=destinationRange 

看到完整的代碼如下:

Sub ranges() 
Dim month As Variant 
Dim months As Variant 
months = Array("V01 DEN HAAG", "V02 AMSTERDAM") 

For Each month In months 
    Dim sourceRange As Excel.Range 
    Dim destinationRange As Excel.Range 
    With Sheets("DATASET") 
     Set destinationRange = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0) 
    End With 
    Set sourceRange = Sheets(month).Range("H7", Sheets(month).Range("H7").End(xlToRight)) 
    sourceRange.Copy Destination:=destinationRange 

Next month 
End Sub 
0

此錯誤的可能原因是您在工作表「DATASET」列B下面3行中沒有任何值。

看這行代碼:

Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

首先花費的範圍從細胞B3到該列中的最後一個單元(B1048576在Excel 2007+)。

之後,它試圖將該範圍向下偏移一行(所以它會嘗試創建一個具有相同行數和列數的範圍,但在下面開始一個單元格)。

但是,這是不可能的,因爲這樣的範圍必須從單元格B4開始並以單元格B1048577結尾,而Excel只有1048576行。


如果你想第一個空行賦給變量destinationRange你應該將這段代碼:用以下

Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

With Sheets("DATASET") 
    Set destinationRange = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0) 
End With 

這兩項陳述是相似的。不同之處在於第二個 從列B中的最後一個單元格開始,並查找上面第一個非空的 單元格。

+0

感謝您的評論,但問題似乎與目標無關,因爲選擇範圍是higlighted =>(Set sourceRange = Sheets(月)。範圍(「H7」,範圍(「H7」)。結束(xlToRight)))有關如何發生這種情況的任何想法? –