【发布时间】:2019-09-18 05:27:01
【问题描述】:
我在使用 Excel VBA 时遇到以下问题:我正在尝试打开现有的空工作簿模板 (pn),从现有工作表 (wb) 复制数据并将其粘贴到“pn”中,但我保留得到各种错误,例如错误 400、下标超出范围和不断冻结。
我已经尝试了许多变体的代码,但大多数情况下(以及我在下面的最后一次尝试中)错误发生在以下行:
Workbooks(pn).Sheets("data").Select
是否与 VBA 正确获取打开的文件名或在工作簿之间切换有关?如何在不同工作簿之间正确切换和复制/粘贴数据?
编辑:另外,当使用 ("Step into") 在调试模式下运行代码时,它工作得很好。我注意到真正打开的文件名只有在代码等待工作簿完全打开或我 alt+tab 进入它时才会出现,否则它的名称一直显示为“Excel”并发生错误!
'opens template
fileName = Application.GetOpenFilename("Excel-files,*.xlsx", 1, "OPEN TEMPLATE", , False)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error GoTo Err1
Workbooks.Open (fileName)
pn = ActiveWorkbook.Name
'copy and paste between workbooks
Windows(wb).Activate
Workbooks(wb).Sheets("Info").Select
Workbooks(wb).Worksheets("Info").Range("A4:Z1000").Select
Selection.Copy 'Destination:=Workbooks(pn).Sheets("data").Cells(3, 1)
Workbooks(pn).Sheets("data").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
【问题讨论】:
-
您可以存储对文件路径的完整引用并在它们之间切换。
Dim pn As Workbook, wp As Workbook和Set pn = Workbooks.Open("complete path")和Set wb = Workbooks.Open("complete path")然后你可以像pn.Sheets("data")一样使用它们