2016-12-30 66 views
1

我想编写一个宏,可以在大约100个文件夹中查找名称为XXXX_TestSummary的文件,并在这些文件中搜索单词“Failed”。宏应返回文本或Excel中包含单词失败的文件名。Excel VBA宏在.doc文件中查找文本

我卡住了,因为我只能找到文件夹中的文件名。以下是密码

Sub MainList() 

    'Updateby20150706 
    Set folder = Application.FileDialog(msoFileDialogFolderPicker) 
    If folder.Show <> -1 Then Exit Sub 
    xDir = folder.SelectedItems(1) 
    Call ListFilesInFolder(xDir, True) 

End Sub 

Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean) 

    Dim xFileSystemObject As Object 
    Dim xFolder As Object 
    Dim xSubFolder As Object 
    Dim xFile As Object 
    Dim rowIndex As Long 
    Set xFileSystemObject = CreateObject("Scripting.FileSystemObject") 
    Set xFolder = xFileSystemObject.GetFolder(xFolderName) 
    rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1 
    For Each xFile In xFolder.Files 
     Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name 
     rowIndex = rowIndex + 1 
    Next xFile 
    If xIsSubfolders Then 
     For Each xSubFolder In xFolder.SubFolders 
     ListFilesInFolder xSubFolder.path, True 
     Next xSubFolder 
    End If 
    Set xFile = Nothing 
    Set xFolder = Nothing 
    Set xFileSystemObject = Nothing 

End Sub 

Function GetFileOwner(ByVal xPath As String, ByVal xName As String) 

    Dim xFolder As Object 
    Dim xFolderItem As Object 
    Dim xShell As Object 
    xName = StrConv(xName, vbUnicode) 
    xPath = StrConv(xPath, vbUnicode) 
    Set xShell = CreateObject("Shell.Application") 
    Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode)) 
    If Not xFolder Is Nothing Then 
     Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode)) 
    End If 
    If Not xFolderItem Is Nothing Then 
     GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8) 
    Else 
     GetFileOwner = "" 
    End If 
    Set xShell = Nothing 
    Set xFolder = Nothing 
    Set xFolderItem = Nothing 

End Function 

请任何人都可以帮助解决这个问题吗?

+0

你正在得到什么错误?为什么你需要一个宏?这些文件夹是否在Excel中列出?这些的所有子文件夹和子文件夹等?你能更具体一点吗? – dgorti

+0

我没有收到任何错误,文件夹和子文件夹中的文件正在Excel中列出,但我无法找到.doc文件和搜索文档中的失败单词并列出包含单词失败的文件名。 –

+0

请你能帮我修复这段代码它非常重要吗? –

回答

0

如果使用上面的代码中去,你需要将你的循环中添加一些代码:

For Each xFile In xFolder.Files 
    Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name 
    (ADD CODE HERE) 
    rowIndex = rowIndex + 1 
Next xFile 

,或者,你可以添加一个,如果实现这一循环的顶端语句来检查,如果xFile.Name包含“失败”:

For Each xFile In xFolder.Files 
    If InStr(xFile.Name, "Failed") Then 
     Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name 
     rowIndex = rowIndex + 1 
    End If 
Next xFile 

这样一来,你就只列出的名称中包含文本“失败”的文件。

+0

非常感谢您的帮助,但我需要找到微软Word文档中的失败的单词,所以现在我能够找到具有名称与_TESTSummary,但我需要访问单词文档&找到单词文档失败。你可以帮我吗 ? –

+0

Word文档有编辑限制或受保护的文档2013.请帮助 –

+0

听起来您需要使用Microsoft Word API。一旦你选择你的文件,你会想创建一个Microsoft Word的实例(或使用现有的实例);那么你将需要打开该文件并使用[Word](https://msdn.microsoft.com/EN-US/library/ff837519.aspx)API命令 –