我有这个宏文件(" graphPrint.xls"),它通过复制并粘贴到宏文件中从文件中读取数据,宏文件使用粘贴的数据生成图形。 现在,我需要修改这个宏,以便它可以从4个文件中读取数据,并将所有数据组合在宏文件中,并生成一个包含所有数据的图形。
我想做的是
这里的问题是在(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'失败"
错误。
有人可以指导我一个解决方案吗?谢谢。
答案 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