2017-07-17 37 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

@王党你有没有试过我的答案和代码?任何反馈 ? –

相关问题