Excel vba如何使用所有格式复制工作表&页面设置

时间:2013-09-13 19:59:12

标签: excel excel-vba vba

我已经看过很多例子来制作工作表的完整副本,但是没有一个能为我工作。在我的情况下,工作表必须进入一个新的工作簿。在我的实际代码中,wb被定义为全局,而工作簿是在另一个调用此实例的子中创建的。

  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,这样可以让我适应并永远。

2 个答案:

答案 0 :(得分:3)

我发现你的第一段代码存在两个问题......

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

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

  3. 试试这个

    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
    

答案 1 :(得分:2)

试一试:

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