我需要将几张工作表复制到新工作簿,然后保存该工作簿。
我正在使用工作表函数来复制它,在我看来这就是该函数的预期目的。
以下是有关如何执行此任务的 MSDN 文档:
Worksheets("Sheet1").Copy
With ActiveWorkbook
.SaveAs Filename:=Environ("TEMP") & "\New1.xlsx", FileFormat:=xlOpenXMLWorkbook
.Close SaveChanges:=False
End With
Run Code Online (Sandbox Code Playgroud)
https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.copy
这正是我想要的,但它使用 ActiveWorkbook 属性,如果运行其他代码或只是与此代码运行并行工作,可能会导致一些错误。
我正在寻找一种无需使用 ActiveWorkbook 属性即可操作新创建的工作簿的方法。
类似这样的事情:
Dim wb as Workbook
set wb = Worksheets("Sheet1").Copy
wb.SaveAs Filename:=Environ("TEMP") & "\New1.xlsx", FileFormat:=xlOpenXMLWorkbook
wb.Close SaveChanges:=False
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个,但它不起作用,但这只是为了说明它没有使用 ActiveWorkbook 属性来引用新工作簿。
提前致谢
从上面的评论:
Sub Tester()
With AsNewWorkbook(Sheet1)
Debug.Print .Name
.SaveAs "C:\Temp\blah.xlsx"
End With
End Sub
Function AsNewWorkbook(ws As Worksheet)
Dim wb As Workbook
Set wb = Workbooks.Add(xlWBATWorksheet) 'has one sheet...
With wb.Sheets(1) 'stolen from Cristian's answer...
If .Name = ws.Name Then .Name = .Name & "x"
End With
ws.Copy before:=wb.Worksheets(1)
Application.DisplayAlerts = False
wb.Worksheets(2).Delete
Application.DisplayAlerts = True
Set AsNewWorkbook = wb
End Function
Run Code Online (Sandbox Code Playgroud)
@BigBen 是对的 - 通常只使用 ActiveWorkbook 就可以了。