运行时错误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单元格才能指定粘贴操作的目标。