Excel vba如何复制所有格式和页面设置的工作表

我已经看到了很多例子来制作一个工作表的完整副本,但是他们都没有为我工作。 在我的情况下,工作表必须进入一个新的工作簿。 在我的实际代码中,wb是全局定义的,工作簿是在另一个叫做这个的子类中创build的。

Dim wb As Workbook Set wb = Workbooks.Add() Dim newtab as Worksheet With ActiveWorkbook .Sheets("Sample Attendance").Copy After:=wb.Sheets(.Sheets.Count) Set newtab = wb.Sheets(wb.Sheets.Count - 1) End With 

没有工作。

同样

  ActiveWorkbook.Sheets("Sample Attendance").Copy After:=wb.Sheets(1) Set newtab = wb.Sheets("Sample Attendance") newtab.Name = tabname 

这两个方法都在Copy语句之后返回。

我已经适度地成功了:

  Set newtab = wb.Worksheets.Add newtab.Name = tabname Set Attendance = ThisWorkbook.Sheets("Sample Attendance") Attendance.Range("A:BB").Copy Destination:=newtab.Cells(1, 1) 

哪个工作。 但是接下来我必须复制所有的PageSetup,这是给我适合并永远占用的。

我看到你的第一段代码有两个问题…

  1. 您正在使用Activeworkbook 。 当您添加一个新的工作簿时,新的工作簿将成为您的活动工作簿:)

  2. 第二个问题是wb.Sheets(.Sheets.Count)之前的DOT。 为什么要从正在复制的工作簿中select计数?

尝试这个

 Sub Sample() Dim thiswb As Workbook, wb As Workbook Dim newtab As Worksheet Set thiswb = ThisWorkbook Set wb = Workbooks.Add() With thiswb .Sheets("Sample Attendance").Copy After:=wb.Sheets(wb.Sheets.Count) Set newtab = wb.Sheets(wb.Sheets.Count - 1) End With End Sub 

给这个镜头:

 Sub SheetCopier() Dim OriginalWB As Workbook Dim NewWB As Workbook Set OriginalWB = ActiveWorkbook Workbooks.Add Set NewWB = ActiveWorkbook OriginalWB.Sheets("qwerty").Copy Before:=NewWB.Sheets(1) End Sub