【发布时间】:2025-11-27 17:45:01
【问题描述】:
我有这个宏文件(“graphPrint.xls”),它通过复制并粘贴到宏文件中从文件中读取数据,该文件使用粘贴的数据生成图形。 现在,我需要修改这个宏,使它可以从 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
,希望它每次都能将其粘贴到宏文件的末尾,这样我就可以将所有数据反映到图表中。然而,这给了
“对象'_Worksheet'的方法'范围'失败”
错误。
有人可以指导我解决问题吗?谢谢。
【问题讨论】:
-
您的
lastrow是否在某处定义? -
是的,我在上面的代码中跳过了那行。我编辑了它。我仍然遇到同样的错误。我刚刚意识到,每次 lastRow 得到 65536...
-
好的。那么,如果您有最后一行数据,为什么不以简单的方式使用它呢? ;)
Range("A" & lastrow)为您提供 A 列中的最后一个单元格。再次检查您在Range("A1:Z1" & lastRow)中的操作。
标签: vba excel copy-paste