我已经看过很多例子来制作工作表的完整副本,但是没有一个能为我工作。在我的情况下,工作表必须进入一个新的工作簿。在我的实际代码中,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,这样可以让我适应并永远。
答案 0 :(得分:3)
我发现你的第一段代码存在两个问题......
您正在使用Activeworkbook
。添加新工作簿时,新工作簿将成为您的活动工作簿:)
第二个问题是.Sheets.Count
中wb.Sheets(.Sheets.Count)
之前的DOT。为什么从你正在复制的工作簿中选择计数?
试试这个
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