Excel 2010 vba复制select工作表,保存并closures这两个工作簿

我有一个工作簿,创build3个日志。 closures之前,我需要这三张表复制到一个新的工作簿,然后我需要两个工作簿来保存和closures自己。 我已经得到尽可能远在下面的代码,现在当我尝试运行模块,它调出了macros窗口,将不会运行。 我确实存储在ThisWorkbook中。 任何input将不胜感激。

Mary Option Explicit Private Sub BeforeClose(Cancel As Boolean) 'Save worksheets to new workbook Dim strSaveName As String Dim DstFile As String 'destination File name Dim DataWorkbook As Workbook 'Unhide Worksheets Set DataWorkbook = ActiveWorkbook DataWorkbook.Sheets("Service Change Log").Visible = True DataWorkbook.Sheets("Transaction Log").Visible = True DataWorkbook.Sheets("Call Initiation Log").Visible = True ChDir "P:\CSR Rollback Tool\Test" strSaveName = Replace(Application.UserName, ",", "") 'Copy Sheets Sheets(Array("Service Change Log", "Transaction Log", "Call Initiation Log")).Copy 'Hide Worksheets Sheets("Service Change Log").Visible = False Sheets("Transaction Log").Visible = False Sheets("Call Initiation Log").Visible = False 'Close Worksheet MsgBox "P:\CSR Rollback Tool\" & strSaveName & Format(Now(), "yyyymmdd hh-mm") & ".xlsx" Application.DisplayAlerts = False DstFile = "P:\CSR Rollback Tool\test\" & strSaveName & Format(Now(), "yyyymmdd hh-mm") & ".xlsx" Workbooks(DstFile).Close SaveChanges:=True DataWorkbook.Close Save:=True End Sub 

新创build的工作簿将重点放在:

 'Copy Sheets Sheets(Array("Service Change Log", "Transaction Log", "Call Initiation Log")).Copy 

所以:

 'Hide Worksheets Sheets("Service Change Log").Visible = False Sheets("Transaction Log").Visible = False Sheets("Call Initiation Log").Visible = False 

会尝试隐藏工作表,但是不能有没有可见工作表的工作簿,所以你只需稍微调整一下你的代码就可以了。

 Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Save worksheets to new workbook Dim strSaveName As String Dim DstFile As String 'destination File name Dim DataWorkbook As Workbook 'Unhide Worksheets Set DataWorkbook = ActiveWorkbook DataWorkbook.Sheets("Service Change Log").Visible = True DataWorkbook.Sheets("Transaction Log").Visible = True DataWorkbook.Sheets("Call Initiation Log").Visible = True ChDir "P:\CSR Rollback Tool\Test" strSaveName = Replace(Application.UserName, ",", "") 'Copy Sheets Sheets(Array("Service Change Log", "Transaction Log", "Call Initiation Log")).Copy 'Save new workbook MsgBox "P:\CSR Rollback Tool\" & strSaveName & Format(Now(), "yyyymmdd hh-mm") & ".xlsx" Application.DisplayAlerts = False DstFile = "P:\CSR Rollback Tool\test\" & strSaveName & Format(Now(), "yyyymmdd hh-mm") & ".xlsx" activeworkbook.saveas(DstFile) activeworkbook.close true 'Hide Worksheets in original workbook DataWorkbook.Sheets("Service Change Log").Visible = False DataWorkbook.Sheets("Transaction Log").Visible = False DataWorkbook.Sheets("Call Initiation Log").Visible = False 'Close Worksheet DataWorkbook.Close Save:=True End Sub 

首先尝试这个,将事件处理程序名称更改为:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) 

代替:

 Private Sub BeforeClose(Cancel As Boolean)