2017-07-17 38 views
0

我有這個宏文件(「graphPrint.xls」),它通過複製並粘貼到宏文件中來讀取文件中的數據,這會生成使用粘貼的數據繪製圖表。 現在,我需要修改此宏,以便它可以從4個文件中讀取數據,並將所有數據組合在宏文件中,並生成一個包含所有數據的圖。VBA從文件中複製數據並將其粘貼到另一個文件的末尾

我所要做的,就是

  1. 開來讀取數據文件,
  2. 文件中複製數據,
  3. 將其粘貼到宏文件,
  4. 接近文件。我想在for循環中重複這個過程。

這裏的問題是,在(3),當我粘貼讀入宏文件中的數據,我必須確保它在數據的末尾粘貼每次所以它不會取代以前的數據。

假設文件名是file0.csv直到file3.csv。 我有這樣的宏:

Dim readFile As String; 
For i = 0 To 3 
    readFile = "file" + CStr(i) + ".csv" 'get file name 
    WorkbooksOpen Filename:= readFile  'open file 
    ActiveSheet.Cells.Select 'select all data from the file 
    lastRow = Range("A1").End(xlDown).Row 'edited 
    Selection.Copy    'copy all 
    Windows("graphPrint.xls").Activate 'open macro file 

    ActiveSheet.Paste     'paste here in macro file   

    Application.CutCopyMode = False 'cancel the copy mode 
    Windows(readFile).Activate 
    ActiveWindow.Close   'close this file 
Next i 

然而,這個宏替換新的每一次粘貼的時候,因此,舊的數據,顯示將只能從最後讀取文件中使用的數據圖。該文件列從「A1」到「Z1」開始,所以我改變

ActiveSheet.Paste 

Range(Range("A1:Z1" & lastRow), ActiveCell.End(xlDown)).Offset(1,0).PasteSpecial 

,希望將它每次粘貼在宏觀文件的末尾,而這我可以將所有數據反映到圖表中。然而,這給

「object'_Worksheet的方法 '範圍' 失敗」

錯誤。

有人能指導我解決問題嗎?謝謝。

+0

您是否在某處定義了'lastrow'? –

+0

是的,我在上面的代碼中跳過了這一行。我編輯它。我仍然得到同樣的錯誤。我只是意識到,每次lastRow越來越65536 ... –

+0

好的。所以,如果你有最後一行數據,爲什麼你沒有以簡單的方式使用它? ;)'Range(「A」&lastrow)'給你列A中的最後一個單元格。再次檢查'Range(「A1:Z1」&lastRow)''中你在做什麼。 –

回答

0

嘗試下面的代碼,使用Find函數來獲取LastRow從列「A:Z」。

Dim readFile As String 
Dim LastCell As Range 
Dim LastRow As Long 

For i = 0 To 3 
    readFile = "file" + CStr(i) + ".csv" 'get file name 
    Workbooks.Open Filename:=readFile ' open file 

    ' get last row in columns "A:Z" using the Find method 
    Set LastCell = ActiveSheet.Range("A:Z").Find(What:="*", After:=Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _ 
         SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False) 

    If Not LastCell Is Nothing Then 
     LastRow = LastCell.Row ' get last Row with data 
    End If 

    ' Copy >> Paste in 1 line 
    Range("A1:Z" & LastRow).Copy Destination:=Workbooks("graphPrint.xls").ActiveSheet.Range("A1") 

    Application.CutCopyMode = False 'cancel the copy mode 
    Windows(readFile).Activate 
    ActiveWindow.Close   'close this file 
Next i 
+0

@王黨你有沒有試過我的答案和代碼?任何反饋 ? –

相關問題