尝试在工作簿之间复制/粘贴时出现错误400

时间:2019-04-29 14:52:09

标签: excel vba

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

我尝试了多种变体的代码,但大多数情况(以下是我的最后尝试)错误发生在以下行:

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

是否与VBA正确获取打开的文件名或在工作簿之间切换有关?如何在不同的工作簿之间正确切换和复制/粘贴数据?

编辑:同样,当使用(“逐步进入”)在调试模式下运行代码时,它也可以正常工作。我注意到,只有在代码等待工作簿完全打开或当我按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

2 个答案:

答案 0 :(得分:0)

您无需在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")

答案 1 :(得分:0)

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

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

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