将文件另存为xlsx后,工作簿模块中的代码仍然运行

ZygD

使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

工作簿打开后立即强制“文件另存为”-代码未执行

firefox将xlsx文件检测为97-2003工作簿(.xls),将文件另存为example.xlsx.xls

VBA 将工作表另存为特定路径中的工作簿

VBA将范围另存为工作簿

将启用宏的工作簿另存为 .xlxs

保存后 - 在新工作簿中创建 2 张无公式复制并另存为

使用 VBA 将启用宏的工作簿另存为“文件名”+ 当前日期

将.xlsx文件另存为.csv文件的SSIS过程

另存为启用宏的工作簿

Excel工作簿另存为.pdf

如何将Excel工作簿中的所有工作表另存为一个文本文件?

使用python代码运行xml并另存为html文件

Matlab:将工作区变量另存为.txt文件

将Excel工作表另存为JSON文件

输入()后将excel文件另存为数据框

打开Word模板并将.doc另存为当前工作簿文件夹-Excel中的VBA

使用单元格值作为标题将工作表另存为新工作簿

VBA将单个工作表另存为CSV(不是整个工作簿)

将Excel工作簿的单独工作表另存为PDF

VBA-另存为后,工作簿的对象会怎样?

将字符串另存为JavaScript中的代码

在Tweepy中循环后另存为DataFrame,无循环工作,添加循环后另存为列表

VBA:xlsm文件格式的另存为,不更改活动工作簿

将POST响应另存为NativeScript中的文件

使用javascript将DOM另存为xml文件中

PHP将数组另存为文件中的新列

VBA仅将可视表另存为工作簿

VBA-Excel-另存为并删除原始工作簿

编辑嵌入在工作簿中的Word文档并另存为副本