首页 > 解决方案 > 我写的基本宏是打开两个工作簿(一个命名并按预期保存,一个空白) - 为什么?

问题描述

我编写了一个基本宏(对 VBA 来说非常新),它从工作簿中提取两列并将它们放入我命名并保存的新工作簿中。这很好用,但是当我运行它时,它会打开并按预期保存一本(例如“医疗保健投资组合”)并打开(但不命名/保存)第二本空白书(使用标准的“书号”名称)。我的代码摘录如下,有人能指出为什么会这样吗?谢谢

Sub CreateHealthcare()

Sheets("Health Care").Select

    With Application
        .SheetsInNewWorkbook = 1
        .Workbooks.Add
            With Workbooks.Add

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("D:D").Copy
                .Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("E:E").Copy
                .Sheets(1).Range("B1").PasteSpecial Paste:=xlPasteValues

                .Sheets(1).Name = "Health Care Portfolio"

            End With

        ActiveWorkbook.SaveAs Filename:="C:\Users\example\Health Care Portfolio" & Format(Now(), " DDMMMYY") _
, FileFormat:=xlCSV, CreateBackup:=False

    End With

End Sub

标签: excelvba

解决方案


在我看来,您的意图是只创建和保存 1 个新工作簿。您的代码包含该 workbooks.add语句两次。所以拿出第一个,应该可以解决你的问题。

如果这不起作用,我建议声明 aWorkbook object并引用它。

Sheets("Health Care").Select此外,由于您的复制语句包含显式引用,因此该行并没有真正做任何事情。

您的代码将如下所示:

Sub CreateHealthcare()
Dim NewBook as Workbook

    Application.SheetsInNewWorkbook = 1

    Set NewBook = Workbooks.Add

            With NewBook

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("D:D").Copy
                .Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

                Workbooks("TVL Portfolio Creator.xlsm").Sheets("Health Care").Range("E:E").Copy
                .Sheets(1).Range("B1").PasteSpecial Paste:=xlPasteValues

                .Sheets(1).Name = "Health Care Portfolio"

            End With

        NewBook.SaveAs Filename:="C:\Users\example\Health Care Portfolio" & Format(Now(), " DDMMMYY") _
, FileFormat:=xlCSV, CreateBackup:=False

    End With

End Sub

推荐阅读