excel - 我写的基本宏是打开两个工作簿(一个命名并按预期保存,一个空白) - 为什么?
问题描述
我编写了一个基本宏(对 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
解决方案
在我看来,您的意图是只创建和保存 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