Excel 使用宏以编程方式删除工作簿中的所有代码
我需要用宏删除工作簿中的所有代码。我用的是这个代码,看起来 我在.VBComponents.Remove.VBComponentsx处收到错误,其中visual basic显示运行时错误“5”:过程调用或参数无效。根据,这个错误意味着要么我用错了我的程序,要么这个程序已经不存在了Excel 使用宏以编程方式删除工作簿中的所有代码,excel,vba,Excel,Vba,我需要用宏删除工作簿中的所有代码。我用的是这个代码,看起来 我在.VBComponents.Remove.VBComponentsx处收到错误,其中visual basic显示运行时错误“5”:过程调用或参数无效。根据,这个错误意味着要么我用错了我的程序,要么这个程序已经不存在了 如何修复此宏并使其与Office 2016配合使用?出现错误的原因不是因为代码太旧::p原因是您正在删除所有模块…包括带有DeleteAllModules:p ups的模块。 顺便说一句,以防您需要将reference
如何修复此宏并使其与Office 2016配合使用?出现错误的原因不是因为代码太旧::p原因是您正在删除所有模块…包括带有DeleteAllModules:p ups的模块。 顺便说一句,以防您需要将referencest设置为 Microsoft Visual Basic for Applications Extensibility 5.3 并将安全设置为不安全 详情请转到 但只是为了快速修复
Option Explicit
'@Folder("DevTools")
Const devTools As String = "devTools"
'This is the name of module with "RemoveAllModules" and it will be ignored
Private Sub RemoveAllModules()
Dim comp As VBComponent
For Each comp In Application.VBE.ActiveVBProject.VBComponents
If comp.Type = vbext_ct_ClassModule Or comp.Type = vbext_ct_StdModule Then
If Not comp.name = devTools Then
Application.VBE.ActiveVBProject.VBComponents.Remove comp
End If
End If
Next
End Sub
出现错误的原因不是因为代码太旧::p原因是您正在删除所有模块…包括带有DeleteAllModules:p ups的模块。 顺便说一句,以防您需要将referencest设置为 Microsoft Visual Basic for Applications Extensibility 5.3 并将安全设置为不安全 详情请转到 但只是为了快速修复
Option Explicit
'@Folder("DevTools")
Const devTools As String = "devTools"
'This is the name of module with "RemoveAllModules" and it will be ignored
Private Sub RemoveAllModules()
Dim comp As VBComponent
For Each comp In Application.VBE.ActiveVBProject.VBComponents
If comp.Type = vbext_ct_ClassModule Or comp.Type = vbext_ct_StdModule Then
If Not comp.name = devTools Then
Application.VBE.ActiveVBProject.VBComponents.Remove comp
End If
End If
Next
End Sub
正如sous2187所说,最好的方法是将文件保存为非宏文件,并让excel删除宏本身。所以我就是这么做的
Sub delhiddensheets()
For Each sh In Worksheets
If sh.Visible = xlSheetHidden Then
sh.Delete
End If
Next sh
End Sub
Sub Valuepaste()
Dim tabs As Object
For Each tabs In Sheets
With tabs
If .Visible = True Then .Select Replace:=False
End With
Next tabs
Cells.Select
Range("A1").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A20").Select
End Sub
Sub DeleteAllCode()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Application.DisplayAlerts = False
newname = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) & "_VALS.xlsx"
ChDir ActiveWorkbook.Path
ActiveWorkbook.SaveAs Filename:=newname, FileFormat:=xlOpenXMLWorkbook
Valuepaste
delhiddensheets
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
正如sous2187所说,最好的方法是将文件保存为非宏文件,并让excel删除宏本身。所以我就是这么做的
Sub delhiddensheets()
For Each sh In Worksheets
If sh.Visible = xlSheetHidden Then
sh.Delete
End If
Next sh
End Sub
Sub Valuepaste()
Dim tabs As Object
For Each tabs In Sheets
With tabs
If .Visible = True Then .Select Replace:=False
End With
Next tabs
Cells.Select
Range("A1").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A20").Select
End Sub
Sub DeleteAllCode()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Application.DisplayAlerts = False
newname = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) & "_VALS.xlsx"
ChDir ActiveWorkbook.Path
ActiveWorkbook.SaveAs Filename:=newname, FileFormat:=xlOpenXMLWorkbook
Valuepaste
delhiddensheets
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
为什么不把它保存为.xlsx呢?这将从工作簿中删除所有vba代码。当代码尝试删除内置工作表或工作簿模块时,会发生此错误。您链接的原始代码包含在错误恢复中,以避免出现此错误。@sous2817我认为您的想法是最好的。为什么不将其保存为.xlsx?这将从工作簿中删除所有vba代码。当代码尝试删除内置工作表或工作簿模块时,会发生此错误。您链接的原始代码包含在错误恢复中,以避免出现此错误。@sous2817我认为您的想法是最好的。最好测试vbext\u ct\u文档,因为您的代码不会删除现有的用户表单。您还需要保留第二个循环以从文档模块中删除代码。调试时,此处的vbext_ct_*变量在我的IDE中没有值。打印它们时,我只得到一个空行。您知道如何解决此问题吗?最好测试vbext\u ct\u文档,因为您的代码不会删除现有的用户表单。您还需要保留第二个循环以从文档模块中删除代码。调试时,此处的vbext_ct_*变量在我的IDE中没有值。打印它们时,我只得到一个空行。你知道我怎样才能解决这个问题吗?