复制工作表时获取新工作簿

use*_*362 2 excel vba

我需要将几张工作表复制到新工作簿,然后保存该工作簿。

我正在使用工作表函数来复制它,在我看来这就是该函数的预期目的。

以下是有关如何执行此任务的 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 属性来引用新工作簿。

提前致谢

Tim*_*ams 5

从上面的评论:

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 就可以了。