excel - 尝试在工作簿之间复制/粘贴时出现错误 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
解决方案
那效果很好。从现在开始,我通常在代码中使用以下结构:
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)
...
有时我只能让复制/粘贴或复制/目标工作,而不是直接分配值,出于某种原因,但仍然比我以前做的要好。谢谢!
推荐阅读
- python - 如何在 keras 生成器中使用 numpy memmap 不超过 RAM 内存?
- c++ - 调用函数后,我的 char 数组的大小自动缩小到 1
- javascript - service-worker 是否使 web-worker 冗余或者它是否比 web-worker 更好(HTML5 功能)
- node.js - 使用 Node.js 客户端库将查询参数添加到 mailchimp 请求
- arrays - Slice Method regarding the return of a certain amount of letters in an array
- c# - How to configure registration/logIn into a existing project?
- audiocontext - have to remove audioContext or MediaElementAudioSourceNode
- c# - 是否可以使用对它一无所知的类的属性(甚至是类型和名称)?
- git - 列出拉取请求上的提交
- javascript - 如何使用 Laravel + React 检查上传文件的类型?