首页 > 解决方案 > 尝试在工作簿之间复制/粘贴时出现错误 400

问题描述

我在使用 Excel VBA 时遇到以下问题:我正在尝试打开现有的空工作簿模板 (pn),从现有工作表 (wb) 复制数据并将其粘贴到“pn”中,但我不断收到各种错误,例如错误 400、下标超出范围和持续冻结。

我已经尝试了许多变体的代码,但大多数情况下(以及我在下面的最后一次尝试中)错误发生在以下行中:

工作簿(pn).Sheets(“数据”)。选择

它是否与 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

标签: excelvba

解决方案


那效果很好。从现在开始,我通常在代码中使用以下结构:

Dim wb As Workbook
Dim hld As Workbook
Set wb = ThisWorkbook
...
wb.Sheets("Info1").Range("A2:AP1500").Copy Destination:=hld.Sheets("Info1").Cells(1, 1)
...

有时我只能让复制/粘贴或复制/目标工作,而不是直接分配值,出于某种原因,但仍然比我以前做的要好。谢谢!


推荐阅读