VBA从文件复制数据并将其粘贴到另一个文件的末尾

时间:2017-07-17 12:43:54

标签: excel vba excel-vba copy-paste

我有这个宏文件(" graphPrint.xls"),它通过复制并粘贴到宏文件中从文件中读取数据,宏文件使用粘贴的数据生成图形。 现在,我需要修改这个宏,以便它可以从4个文件中读取数据,并将所有数据组合在宏文件中,并生成一个包含所有数据的图形。

我想做的是

  1. 打开文件以从中读取数据
  2. 复制文件中的数据
  3. 将其粘贴到宏文件中
  4. 关闭文件。我想在for循环中重复这个过程。
  5. 这里的问题是在(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
    

    ,希望每次都将它粘贴到宏文件的末尾,这样我就可以将所有数据反映到图表中。但是,这给出了

      

    "方法'范围'对象' _Worksheet'失败"

    错误。

    有人可以指导我一个解决方案吗?谢谢。

1 个答案:

答案 0 :(得分: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