运行时错误9 – 从一个工作簿复制到另一个工作簿时,下标超出范围
我试图从CSV文件打开并复制工作表数据,并将其粘贴到另一个工作簿,但我得到运行时错误9 – 下标超出范围 。
Option Explicit Sub import() Dim filename As String Dim curfilename As String curfilename = ThisWorkbook.Path filename = Application.GetOpenFilename Application.ScreenUpdating = False Dim x As Workbook Set x = Workbooks.Open(filename) Workbooks(filename).Sheets("Owners").Range("A1:Z10000").Copy 'Error on this line Workbooks(curfilename).Sheets("Owners").Range("A1:Z10000").Paste 'Close x: x.Close End Sub
Application.GetOpenFilename方法返回包含扩展名的完整path和文件名。 如果引用一个打开的工作簿,则只需要带有扩展名的文件名; 而不是path。
Worksheet.Paste不能这样工作,但Range.PasteSpecial方法 。 改变你的代码是,
Dim Filename As String, currFilename As String Dim x As Workbook Application.ScreenUpdating = False currFilename = ThisWorkbook.Name Filename = Application.GetOpenFilename Set x = Workbooks.Open(Filename) x.Sheets("Owners").Range("A1:Z10000").Copy Workbooks(currFilename).Sheets("Owners").Range("A1").PasteSpecial Application.DisplayAlerts = False x.Close SaveChanges:=False Application.DisplayAlerts = True Application.ScreenUpdating = True
我已经更正了variables赋值中的一些小错误( .Path
应该是.Name
),并添加了一些环境控制以避免愚蠢的警告消息。
或者,可以使用Range.Copy方法 ,您可以直接将目标作为参数提供。
x.Sheets("Owners").Range("A1:Z10000").Copy _ Destination:=Workbooks(curfilename).Sheets("Owners").Range("A1")
请注意,只有一个范围内的左上angular单元格才能指定粘贴操作的目标。