【发布时间】:2013-11-27 15:48:35
【问题描述】:
我正在尝试构建代码以远程循环遍历包含 .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
【问题讨论】:
-
我不确定我是否理解...如果要从中删除宏,为什么需要在所有文件中引用?还是我误解了您的问题?
-
@Siddharth 我认为他想参考 VBA 可扩展性 5.3,以便他可以访问 VBIDE 以删除宏。 @ user1857500 如果是这种情况,那么您不需要在您正在打开的工作簿中引用可扩展性,只需您正在运行的工作簿即可手动完成。您只需要确保您访问正确的 VBProject,我会将 Objworkbook 传递到您的
DeleteAllVBACode调用中。 -
@CuberChase:您不需要设置对它的引用来删除宏。您需要为此启用
Trust Access To Visual Basics Project。 -
@Siddharth 如果您想通过代码删除宏,您需要在您的 VBAProject 中引用 VBA Extensibility 5.3(即 VBIDE 对象模型)。
-
@CuberChase:不,那不是真的。