另存为并禁用公式和macros

我想要一个VBA代码保存为一个地图,并closures所有的公式和macros。

这是我到目前为止,但它不起作用。

Sub Opslaanzonderformules() Dim strFileName As Variant, strPath As String Dim VBProj As VBIDE.VBProject, VBComp As VBIDE.VBComponent, CodeMod As VBIDE.CodeModule strFileName = Application.GetSaveAsFilename(InitialFileName:=strPath & [AJ2], _ FileFilter:="Excel Files (*.xls), *.xls, Excel 2007 Files (*.xlsm), *.xslm", _ FilterIndex:=1, _ Title:="Kies de juiste map en pas eventueel de bestandsnaam aan!") If strFileName = False Then MsgBox "Oh oh... je hebt niet opgeslagen! " Else ActiveSheet.Copy With ActiveWorkbook With .Sheets("blad1") .Unprotect .UsedRange.Value = .UsedRange.Value .Protect End With Set VBProj = .VBProject For Each VBComp In VBProj.VBComponents If VBComp.Type = vbext_ct_Document Then Set CodeMod = VBComp.CodeModule With CodeMod .DeleteLines 1, .CountOfLines End With Else VBProj.VBComponents.Remove VBComp End If Next VBComp .SaveAs Filename:=strFileName End With MsgBox "Gelukt! Opgeslagen als: " & strFileName End If End Sub 

如果将文件保存为xlsx则自动删除任何代码。 这简化为:

 Sub Opslaanzonderformules() Dim strFileName As Variant, strPath As String Dim VBProj As VBIDE.VBProject, VBComp As VBIDE.VBComponent, CodeMod As VBIDE.CodeModule strFileName = Application.GetSaveAsFilename(InitialFileName:=strPath & [AJ2], _ FileFilter:="Excel Files (*.xls), *.xls, Excel 2007 Files (*.xlsm), *.xslm", _ FilterIndex:=1, _ Title:="Kies de juiste map en pas eventueel de bestandsnaam aan!") If strFileName = False Then MsgBox "Oh oh... je hebt niet opgeslagen! " Else ActiveSheet.Copy With ActiveWorkbook With .Sheets(1) .Unprotect .UsedRange.Value = .UsedRange.Value .Protect End With .SaveAs Left$(strFileName, InStrRev(strFileName, ".")) & "xlsx", xlOpenXMLWorkbook End With MsgBox "Gelukt! Opgeslagen als: " & Left$(strFileName, InStrRev(strFileName, ".")) & "xlsx" End If End Sub 

除非提供更多信息,否则我的猜测是在“工具”|“参考”中未select“Microsoft Visual Basic for Applications Extensibility#。#”的引用,或者在代码中手动添加该引用。

http://www.cpearson.com/excel/vbe.aspx

我照原样复制了你的代码,VBProj的声明就是VBIDE.VBProject。 只要我引用上述引用,代码就会执行。