【问题标题】:Error 400 when trying to copy/paste between workbooks尝试在工作簿之间复制/粘贴时出现错误 400
【发布时间】: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") 一样使用它们

标签: excel vba


【解决方案1】:

您永远不需要在 VBA 中使用复制和粘贴。您可以为变量分配值,也可以直接将单元格分配给单元格。

示例:

'opens template
Filename = Application.GetOpenFilename("Excel-files,*.xlsx", 1, "OPEN TEMPLATE", , False)
Dim pn As Workbook
pn = Workbooks.Open(Filename)

'copy and paste between workbooks
pn.Sheets("data").Range("A3") = Workbooks(wb).Worksheets("Info").Range("A4:Z1000")

【讨论】:

  • 注意:对变量 wb 做同样的事情。把它做成工作簿。如果您按名称而不是句柄引用工作簿,您将遇到问题。名称可以更改。
【解决方案2】:

效果很好。从现在开始,我一般在代码中使用如下结构:

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)
...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多