每次我引用新创建的工作簿时,Excel 都会创建另一个工作簿

Every time I reference a newly created workbook, Excel creates another

提问人:Josh Frankel 提问时间:10/25/2023 最后编辑:BigBenJosh Frankel 更新时间:10/25/2023 访问量:72

问:

我正在尝试做应该非常简单的事情。从现有工作簿中的一个工作表复制数据,创建一个新工作簿,将该新数据粘贴到该工作簿中,然后保存并关闭新工作簿。但是,每次引用新工作簿时,Excel 都会创建另一个工作簿。我一定犯了一个非常基本的错误。

    Dim oldWB, newWB As Workbook
    
    Set oldWB = ActiveWorkbook
    Set newWB = Workbooks.Add
    
    oldWB.Worksheets("Sheet1").Copy
    newWB.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    newWB.SaveAs "W:\filepath\CopyPasteTest.xlsx"
    newWB.Close
    
Excel VBA 复制 粘贴

评论

0赞 PeterT 10/25/2023
运行代码时,会创建多少个新工作簿?应该只有一个。
0赞 freeflow 10/25/2023
oldWB 将是一个变体类型,而不是一个工作簿。在VBA中,您需要为每个单独的变量指定类型。最佳做法是每行一个变暗的变量,也可以选择后跟一个初始化器。如果您还没有这样做,请为 VBA 安装免费且出色的 Rubberduck 插件并查看代码检查。

答:

5赞 BigBen 10/25/2023 #1

不带任何参数的 Worksheet.Copy 将创建一个新工作簿。

文档中:

如果未指定“之前”或“之后”,Microsoft Excel 将创建一个包含复制的工作表对象的新工作簿。

您要使用 Range.Copy

oldWB.Worksheets("Sheet1").UsedRange.Copy