【问题标题】:Copy a sheet from one workbook and save in a new workbook with the name being a value in a cell从一个工作簿复制工作表并保存在新工作簿中,名称为单元格中的值
【发布时间】:2013-02-27 22:46:47
【问题描述】:

我想从 Workbook1 复制 Sheet2 并将其粘贴到新 Workbook 的 Sheet1 中,并将新 Workbook 保存为 Sheet2、Workbook 1 中单元格 A1 的值。我希望当我单击一个按钮时触发此宏我已经添加了。

这是我到目前为止所做的,但它创建了两个工作簿 - 一个名称正确但不包含Sheet2、Workbook1 的内容 - 另一个具有 Sheet2、Workbook1 的内容但不是正确的 Workbook 名称

Sub CreateWorkbook()

Dim n As String
n = ThisWorkbook.Path & "\" & Range("A1").Value & ".xls"
Workbooks.Add
ActiveWorkbook.SaveAs n
ThisWorkbook.Sheets("Sheet2").Copy
ActiveWorkbook.Sheets("Sheet1").PasteSpecial xlPasteValues

End Sub

我在这里错过了什么?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我认为Workbooks.Add 创建的新工作簿默认不会变成ActiveWorkbook

    使用 ThisWorkbookActiveWorkbook 会让人感到困惑。

    我喜欢将工作簿和工作表之类的东西设置为变量,这样你就知道你在处理什么:)

    我无法让Copy 然后PasteSpecial 位工作(尽管我没有那么努力)。

    下面的示例应该可以满足您的需求。我使用Sheet2!A1 作为文件名,不确定代码示例中的AK545 是做什么用的。

    Sub Example()
    Dim Output As Workbook
    Dim FileName As String
    
    Set Output = Workbooks.Add
    FileName = ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets(2).Cells(1, 1).Value & ".xls"
    
    Output.SaveAs FileName
    
    Application.DisplayAlerts = False
    
    Output.Worksheets("Sheet1").Delete
    ThisWorkbook.Worksheets(2).Copy Before:=Output.Worksheets("Sheet2")
    Output.Worksheets(1).Name = "Sheet1"
    
    Application.DisplayAlerts = True
    
    Output.Save
    
    End Sub
    

    【讨论】:

    • 感谢您的回答,现在就试试。 AK454是用来命名新工作簿的单元格,只是忘记在代码示例中更改了
    • 为什么放Output.Worksheets("Sheet1").Delete
    • 代码不会将值复制到 Sheet1 它将整个工作表复制到新工作簿中(由于名称重复而被称为 Sheet2(2))我删除了 Sheet1 所以可以重命名新的工作簿工作表到Sheet1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多