2

我已经看过很多制作工作表完整副本的示例,但没有一个对我有用。在我的情况下,工作表必须进入一个新的工作簿。在我的实际代码中, 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,这让我非常适应并且需要永远。

4

2 回答 2

3

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

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

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

尝试这个

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
于 2013-09-13T20:20:59.240 回答
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
于 2013-09-13T20:28:19.987 回答