如何使用vba将工作表复制到另一个工作簿?

Bri*_*ian 23 excel vba templates excel-vba

所以,我通常要做的就是复制一本工作簿.但是,源工作簿正在运行我的宏,我希望它自己创建一个相同的副本,但没有宏.我觉得应该有一个简单的方法来使用VBA,但还没有找到它.我正在考虑将这些工作表逐个复制到我将创建的新工作簿中.我该怎么做?有没有更好的办法?

Pat*_*rez 48

我想略微重写keytarhero的回复:

Sub CopyWorkbook()

Dim sh as Worksheet,  wb as workbook

Set wb = workbooks("Target workbook")
For Each sh in workbooks("source workbook").Worksheets
   sh.Copy After:=wb.Sheets(wb.sheets.count) 
Next sh

End Sub
Run Code Online (Sandbox Code Playgroud)

编辑:您还可以构建工作表名称数组并立即复制.

Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
         After:=wb.Sheets(wb.sheets.count)
Run Code Online (Sandbox Code Playgroud)

注意:从XLS复制工作表?到XLS将导致错误.相反的工作正常(XLS到XLSX)

  • 我同意,这个解决方案更好. (2认同)

Chr*_*ynn 30

奥兹格里德的人回答了类似的问题.基本上,您只需将每个工作表从Workbook1复制到Workbook2.

Sub CopyWorkbook()

    Dim currentSheet as Worksheet
    Dim sheetIndex as Integer
    sheetIndex = 1

    For Each currentSheet in Worksheets

        Windows("SOURCE WORKBOOK").Activate 
        currentSheet.Select
        currentSheet.Copy Before:=Workbooks("TARGET WORKBOOK").Sheets(sheetIndex) 

        sheetIndex = sheetIndex + 1

    Next currentSheet

End Sub
Run Code Online (Sandbox Code Playgroud)

免责声明:我没有尝试过此代码,而只是采用了链接的示例来解决您的问题.如果不出意外,它应该引导您达到预期的解决方案.

  • 为什么`.activate`和`.select`?,转储它.你也想循环使用`Thisworkbook.worksheets`.我不确定它是否适用于隐藏的工作表(选择肯定会导致错误) (2认同)

Bra*_*rad 12

你可以保存为xlsx.然后,您将松开宏并生成一个新工作簿,工作量少一点.

ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
Run Code Online (Sandbox Code Playgroud)

  • 确实是聪明的做法 (3认同)

小智 5

我能够将运行了vba应用程序的工作簿中的所有工作表复制到没有应用程序宏的新工作簿,其中:

ActiveWorkbook.Sheets.Copy
Run Code Online (Sandbox Code Playgroud)