Excel在子文件夹中搜索

时间:2014-03-19 13:17:31

标签: vbscript

使用我从网上提取的以下代码,我能够在单个目录中搜索包含特定行中字符串的excel文件。我如何允许在所有子文件夹中递归?我找到了一些答案,但我不知道如何在我的代码中实现它们。我昨天才开始搞乱VBScript而且我对如何使这项工作感到困惑。

strComputer = "CAA-W74109188"

Set objExcel = CreateObject("Excel.Application", strComputer)

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='c:\TDRS'} Where " _
    & "ResultClass = CIM_DataFile")


 For Each objFile In FileList
  If (objFile.Extension = "xlsm" or  objFile.Extension = "xls") Then
    Set objWorkbook = objExcel.Workbooks.Open(objFile.Name)
    Set objWorksheet = objWorkbook.Worksheets(1)
    If objExcel.Cells(3,10) = "Complete" or objExcel.Cells(3,9) = "Released" Then
        Wscript.Echo objFile.FileName
    End If

objExcel.DisplayAlerts = False
objworkbook.Saved = False
    objWorkbook.Close False
End If
Next

objExcel.Quit

2 个答案:

答案 0 :(得分:0)

这是我用来删除文件的脚本,我已根据您的需要对其进行了修改。递归功能是你完成工作所需要的,而且我总是觉得它们很有趣,而且很难绕过我的脑袋。

Dim Shell : Set Shell = WScript.CreateObject( "WScript.Shell" )
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim objExcel : Set objExcel = CreateObject("Excel.Application")

Dim Paths(0)
Paths(0) = "c:\temp"

For Each Path in Paths
   FolderScan(Path)
Next

Sub FolderScan(Folder) 
 Set base = oFSO.GetFolder(Folder) 
    If base.SubFolders.Count Then
       For Each folder in Base.SubFolders
         FolderScan(folder.Path)
       Next
    End If
 Set files = base.Files
    If files.Count Then
       For Each File in files
          If LCase(oFSO.GetExtensionName(File.Path) = "xlsm") or _
            LCase(oFSO.GetExtensionName(File.Path) = "xls") Then

              Dim objWorkbook : Set objWorkbook = objExcel.Workbooks.Open(File.Path)
              Dim objWorkSheet : Set objWorkSheet = objWorkbook.Worksheets(1)

                If (objExcel.Cells(3,10) = "Complete" or _
                  objExcel.Cells(3,9) = "Released") Then
                    Wscript.echo File.Path
                End if
                objExcel.DisplayAlerts = False
                objExcel.Quit
          End If
       Next
    End If
 End Sub

答案 1 :(得分:0)

这是一个通用的递归函数,它迭代给定文件夹 object 的所有文件和子文件夹。

Dim FileSystem
Set FileSystem = CreateObject("Scripting.FileSystemObject")

DoFolder FileSystem.GetFolder("c:\somefolder")

Sub DoFolder(Folder)

    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next

    Dim File
    For Each File In Folder.Files
        ' Operate on each file
    Next

End Sub