使用VB.NET形式的按钮,.xlsm
打开文件并将其另存为.xlsx
。保存文件后,不会删除.xlsx
文件(Workbook_BeforeClose
事件)中的代码,因此,当我要关闭文件时,代码将运行!重新打开文件后,没有代码了。
这是我的VB.NET类:
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkbooks As Excel.Workbooks
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
xlApp = New Excel.Application
xlWorkbooks = xlApp.Workbooks
xlWorkBook = xlWorkbooks.Open("C:\Temp\testTemplate.xlsm")
xlApp.DisplayAlerts = False
xlWorkBook.SaveAs(Filename:="C:\Temp\testTemp.xlsx", FileFormat:=51) '51=xlOpenXMLWorkbook
xlApp.DisplayAlerts = True
xlApp.Visible = True
'Clean Up
releaseObject(xlWorkBook)
releaseObject(xlWorkbooks)
releaseObject(xlApp)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
GC.WaitForPendingFinalizers()
End Try
End Sub
End Class
这在Excel文件的工作簿模块中:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "event still runs"
End Sub
如何正确保存文件以使其中没有代码?
没错,在关闭代码之前,不会删除该代码。我想您可以在xlsm的BeforeClose
事件中设置某种类型的标志,以检查其文件类型,并且仅在xlsm时才运行。或者,您可以使用Worksheets.Copy
代替SaveAs
并将生成的工作簿(其中不包含VBA)另存为xlsx,但是可能需要清理参考问题。或者,您可以设置xlApp.EnableEvents=False
,关闭新保存的xlsx,将其设置回True,然后重新打开xlsx。
这是我在第二个选项上写的帖子:http: //yoursumbuddy.com/copy-an-xlsm-xlsx/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句