gpt4 book ai didi

vb.net - 文件保存为 xlsx 后,工作簿模块中的代码仍然运行

转载 作者:行者123 更新时间:2023-12-02 11:28:15 24 4
gpt4 key购买 nike

使用 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/

关于vb.net - 文件保存为 xlsx 后,工作簿模块中的代码仍然运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com