运行时错误9 - 从一个工作簿复制到另一个工作簿时,下标超出范围

时间:2015-09-25 07:40:37

标签: excel vba excel-vba

我正在尝试打开并复制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

1 个答案:

答案 0 :(得分:1)

Application.GetOpenFilename method返回包含扩展名的完整路径和文件名。如果引用打开的工作簿,您只需要带扩展名的文件名;不是路径。

Worksheet.Paste不起作用,但Range.PasteSpecial method会这样。将您的代码更改为

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

我已经纠正了变量分配中的一些小错误(.Path应该是.Name)并添加了一些环境控制以避免愚蠢的警告消息。

或者,可以使用Range.Copy method,您可以直接将目的地作为参数提供。

x.Sheets("Owners").Range("A1:Z10000").Copy _
  Destination:=Workbooks(curfilename).Sheets("Owners").Range("A1")

请注意,只需要范围中的左上角单元格来指定粘贴操作的目标。