我正在尝试打开并复制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
答案 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")
请注意,只需要范围中的左上角单元格来指定粘贴操作的目标。