vba - 从文件夹中的所有工作簿中删除 VBA 代码

标签 vba excel

我正在尝试构建代码来远程循环包含 .xls 文件的文件夹并删除其中包含的宏。到目前为止,我已经使各个组件正常工作,但在激活各种工作簿,然后以编程方式确保每个文件中引用“Microsoft Visual Basic for Application Extensibility 5.3”时遇到困难。

谢谢!

Sub LoopFiles()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False

strPath = ' enter path here

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(strPath)

For Each objfile In objFolder.Files


If objFso.GetExtensionName(objfile.Path) = "xls" Then
   Set Objworkbook = objExcel.Workbooks.Open(objfile.Path)
    ' Include your code to work with the Excel object here
    Objworkbook.Activate

    AddReference (objfile)

   Objworkbook.Close True 'Save changes
End If

Next

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub




Sub AddReference(FileRequired)

     FileRequired.Activate
     'MsgBox "Sheet: " & ActiveWorkbook.Name

     ActiveWorkbook.VBProject.References.AddFromGuid _
     GUID:="{0002E157-0000-0000-C000-000000000046}", _
     Major:=5, Minor:=3
End Sub




Sub DeleteAllVBACode()

        Dim VBProj As VBIDE.VBProject
        Dim VBComp As VBIDE.VBComponent
        Dim CodeMod As VBIDE.CodeModule
        Set VBProj = ActiveWorkbook.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
    End Sub

最佳答案

正如我在评论中提到的,您无需添加对 Microsoft Visual Basic for Application Extensibility 5.3 的引用即可从文件中删除代码。考虑这个小练习。

1)。创建 Excel 文件

2)。将此代码粘贴到模块中

Sub Sample1()
    MsgBox "A"
End Sub

3)。将上述文件保存为C:\Sample.xls

4)。关闭文件

5)。打开一个新的 Excel 文件并将此代码粘贴到模块中

Option Explicit

'~~> Trust Access To Visual Basics Project must be enabled.
Sub Sample2()
    Dim wb As Workbook
    Dim i As Long

    '~~> Replace this with the relevant file
    '~~> We can open the files in a loop as well
    Set wb = Workbooks.Open("C:\Sample.xls")

    On Error Resume Next
    With wb.VBProject
        '~~> Remove the components
        For i = .VBComponents.Count To 1 Step -1
            .VBComponents.Remove .VBComponents(i)
        Next i
        '~~> Remove the code lines
        For i = .VBComponents.Count To 1 Step -1
            .VBComponents(i).CodeModule.DeleteLines _
            1, .VBComponents(i).CodeModule.CountOfLines
        Next i
    End With
    On Error GoTo 0
End Sub

6) 确保启用“信任对 Visual Basics 项目的访问”

7) 运行Sample2()

您将看到 Sample.xls 中的代码已被删除,而且我们甚至还没有设置对 Microsoft Visual Basic for Application Extensibility 5.3 的引用。

关于vba - 从文件夹中的所有工作簿中删除 VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763930/

相关文章:

vba - 用数据切割行并移动到不同的工作表 VBA

asp.net-mvc - EPPlus 失去行高

Excel - 从单元格中提取数值

vba - Excel VBA - 更新图表比例时出错

vba - Application.OnKey 错误, "%a"击键

vba - .Cells(.Rows.Count ,"A").End(xlUp).row 的含义

excel - OleDbDataAdapter.Update 返回行,但没有行添加到 Excel 电子表格

python - 如何将Excel文件中的像素值转换为图像?

vba - url 检查器 VBA,重定向时显示重定向的 url

com - 如何创建特定于工作簿的 Excel 插件