估计这个问题是由Office本身的缺陷造成的。也就是说在一个EXCEL内用COPY命令反复拷贝SHEET,就会出现工作表驻留内存不能正常释放的问题。
如果用workbooks.add()就不会有这个问题,不过这样增加的是一个空的SHEET,如果是要拷贝模版,只能打开一个workbooks,让后将某个SHEET反复拷贝到另一个WORKBOOK中去,这样不会有问题。
Dim ExcelApp As Excel.Application
Dim wbSourceBook, wbTargetBook As Workbook
Dim wsSource, wsTarget As Worksheet
Dim xlsPath As String
xlsPath = CurrentProject.Path + "\TEST.xls"
Set ExcelApp = New Excel.Application
Set wbSourceBook = ExcelApp.Workbooks.Open(xlsPath)
Set wbTargetBook = ExcelApp.Workbooks.Add()
ExcelApp.Visible = True
'Application.SheetsInNewWorkbook = 1
'Application.ScreenUpdating = False
Set wsSource = wbSourceBook.Sheets("sheet1")
Dim i
For i = 1 To 3
wsSource.Copy After:=wbTargetBook.Sheets(wbTargetBook.Sheets.Count)
Set wsTarget = wbTargetBook.Sheets(wbTargetBook.Sheets.Count)
Next
wbTargetBook.Sheets("sheet1").Delete
wbTargetBook.Sheets("sheet2").Delete
wbTargetBook.Sheets("sheet3").Delete
'wb.Save
wbSourceBook.Close
Set wsSource = Nothing
Set wbSourceBook = Nothing
Set ExcelApp = Nothing
End Sub
Private Sub Command0_DblClick(Cancel As Integer)
Dim wbSourceBook, wbTargetBook As Workbook
Dim wsSource As Worksheet, wsTarget As Worksheet
'(1) Create a new workbook and copy the template worksheet to this new book
Application.SheetsInNewWorkbook = 1
Set wbTargetBook = Workbooks.Add()
Application.ScreenUpdating = False
Set wsSource = ThisWorkbook.Sheets("MyTemplate")
wsSource.Copy After:=wbTargetBook.Sheets(wbTargetBook.Sheets.Count)
Set wsTarget = wbTargetBook.Sheets(wbTargetBook.Sheets.Count)
'(2) Populate the worksheet of the new workbook.
With wsTarget
.Visible = xlSheetVisible
.Activate
.Range("A1") = "My Heading Text"
.Range("A2") = Format$(Now, "dd-mm-yy")
.Range("A3") = "My Other Data"
....
End With
'(3) Save the newly created workbook
Application.DisplayAlerts = False
wbTargetBook.SaveAs "C:\Temp\TargetWorkbookName.xlsx"
'(4) and then close it
wbTargetBook.Saved = True
wbTargetBook.Close
'(5) Launch a new instance of Excel and open the saved workbook
Set appExcel = New Excel.Application
appExcel.Workbooks.Open ("C:\Temp\TargetWorkbookName.xlsx")
appExcel.Visible = True