如何递归检查现有Excel文件的所有子文件夹并提取所有VBA代码
我正在寻找一种方法,如何将PowerShell脚本与VBscript结合起来,从复杂文件夹结构中的大量excel文件中提取所有VBA/win32代码 我需要递归检查现有Excel文件(PSH)的所有子文件夹,并将每个Excel工作表的所有代码VBA/win32/对话框(VBS)提取到相同文件夹级别的文本文件中 我发现VBscript可以从excel表格中提取VBA代码,请参见下面的链接和代码。现在我想将其合并到一个PowerShell脚本中 你能帮帮我吗 代码:如何递归检查现有Excel文件的所有子文件夹并提取所有VBA代码,excel,powershell,recursion,vbscript,extract,Excel,Powershell,Recursion,Vbscript,Extract,我正在寻找一种方法,如何将PowerShell脚本与VBscript结合起来,从复杂文件夹结构中的大量excel文件中提取所有VBA/win32代码 我需要递归检查现有Excel文件(PSH)的所有子文件夹,并将每个Excel工作表的所有代码VBA/win32/对话框(VBS)提取到相同文件夹级别的文本文件中 我发现VBscript可以从excel表格中提取VBA代码,请参见下面的链接和代码。现在我想将其合并到一个PowerShell脚本中 你能帮帮我吗 代码: 选项显式 常量vbext\u
选项显式
常量vbext\u ct\u ClassModule=2
常量vbext\U ct\U文件=100
常数vbext\u ct\u MSForm=3
常量vbext\U ct\U标准模块=1
主要
副总管
Dim xl
暗fs
暗淡的笔记本
Dim VBComp
暗Sfx
Dim导出文件夹
如果Wscript.Arguments.Count为1,则
MsgBox“作为唯一的参数,提供XLS文件的完整路径以从中提取所有VBA。”
其他的
Set xl=CreateObject(“Excel.Application”)
设置fs=CreateObject(“Scripting.FileSystemObject”)
xl.Visible=true
设置WBook=xl.Workbooks.Open(Trim(wScript.Arguments(0)))
ExportFolder=WBook.Path&“\”&fs.GetBaseName(WBook.Name)
fs.CreateFolder(ExportFolder)
对于WBook.VBProject.VBComponents中的每个VBComp
选择案例VBComp.Type
案例vbext\U ct\U类模块,vbext\U ct\U文档
Sfx=“.cls”
案例vbext\U ct\MSForm
Sfx=“.frm”
案例vbext\U ct\U标准模块
Sfx=“.bas”
其他情况
Sfx=“”
结束选择
如果是Sfx“”,则
出错时继续下一步
呃,明白了
VBComp.Export导出文件夹&“\”&VBComp.Name&Sfx
如果错误号为0,则
MsgBox“无法导出”&ExportFolder&“\”&VBComp.Name&Sfx
如果结束
错误转到0
如果结束
下一个
xl.退出
如果结束
端接头
PowerShell中的递归非常简单:
Get ChildItem'C:\base\folder'-Include'*.xls*'-Recurse |%{
&cscript.exe//NoLogo'C:\path\to\your.vbs'$\ FullName
}
但是,与其为每个文件运行VBScript,我建议将VBScript代码翻译为PowerShell。它不需要太多的工作,而且还将提高代码的整体性能
option explicit
Const vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100
Const vbext_ct_MSForm = 3
Const vbext_ct_StdModule = 1
Main
Sub Main
Dim xl
Dim fs
Dim WBook
Dim VBComp
Dim Sfx
Dim ExportFolder
If Wscript.Arguments.Count <> 1 Then
MsgBox "As the only argument, give the FULL path to an XLS file to extract all the VBA from it."
Else
Set xl = CreateObject("Excel.Application")
Set fs = CreateObject("Scripting.FileSystemObject")
xl.Visible = true
Set WBook = xl.Workbooks.Open(Trim(wScript.Arguments(0)))
ExportFolder = WBook.Path & "\" & fs.GetBaseName(WBook.Name)
fs.CreateFolder(ExportFolder)
For Each VBComp In WBook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
On Error Resume Next
Err.Clear
VBComp.Export ExportFolder & "\" & VBComp.Name & Sfx
If Err.Number <> 0 Then
MsgBox "Failed to export " & ExportFolder & "\" & VBComp.Name & Sfx
End If
On Error Goto 0
End If
Next
xl.Quit
End If
End Sub