Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA宏在.doc文件中查找文本_Vba_Excel - Fatal编程技术网

Excel VBA宏在.doc文件中查找文本

Excel VBA宏在.doc文件中查找文本,vba,excel,Vba,Excel,我想写一个宏,可以在大约100个文件夹中找到名为XXXX_TestSummary的文件,并在这些文件中搜索“失败”一词。宏应返回文本或excel中包含word failed的文件名 我被卡住了,因为我只能在文件夹中找到文件名。下面是代码 Sub MainList() 'Updateby20150706 Set folder = Application.FileDialog(msoFileDialogFolderPicker) If folder.Show <>

我想写一个宏,可以在大约100个文件夹中找到名为XXXX_TestSummary的文件,并在这些文件中搜索“失败”一词。宏应返回文本或excel中包含word failed的文件名

我被卡住了,因为我只能在文件夹中找到文件名。下面是代码

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
子主列表()
'更新20150706
Set folder=Application.FileDialog(msoFileDialogFolderPicker)
如果folder.Show为-1,则退出子文件夹
xDir=文件夹。选择编辑项(1)
调用ListFileInfolder(xDir,True)
端接头
子列表文件信息文件夹(ByVal xFolderName作为字符串,ByVal xIsSubfolders作为布尔值)
将xFileSystemObject作为对象进行调整
将xFolder设置为对象
Dim xSubFolder作为对象
将X文件作为对象
变暗,变长
设置xFileSystemObject=CreateObject(“Scripting.FileSystemObject”)
设置xFolder=xFileSystemObject.GetFolder(xFolderName)
rowIndex=Application.ActiveSheet.Range(“A65536”).End(xlUp).行+1
对于xFolder.Files中的每个xFile
Application.ActiveSheet.Cells(rowIndex,1).Formula=xFile.Name
行索引=行索引+1
下一个xFile
如果是子文件夹,则
对于xFolder.SubFolders中的每个xSubFolder
ListFileInfolder xSubFolder.path,True
下一个xSubFolder
如果结束
Set xFile=Nothing
设置xFolder=Nothing
设置xFileSystemObject=Nothing
端接头
函数GetFileOwner(ByVal xPath作为字符串,ByVal xName作为字符串)
将xFolder设置为对象
Dim xFolderItem作为对象
Dim xShell作为对象
xName=StrConv(xName,vbUnicode)
xPath=StrConv(xPath,vbUnicode)
设置xShell=CreateObject(“Shell.Application”)
设置xFolder=xShell.Namespace(StrConv(xPath,vbFromUnicode))
如果不是,那么xFolder什么都不是
设置xFolderItem=xFolder.ParseName(StrConv(xName,vbFromUnicode))
如果结束
如果不是,那么xFolderItem什么都不是
GetFileOwner=xFolder.GetDetailsOf(xFolderItem,8)
其他的
GetFileOwner=“”
如果结束
Set xShell=Nothing
设置xFolder=Nothing
设置xFolderItem=Nothing
端函数

谁能帮我修一下吗

如果要使用上述代码,则需要在循环中添加一些代码:

For Each xFile In xFolder.Files
    Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
    (ADD CODE HERE)
    rowIndex = rowIndex + 1
Next xFile
或者,您也可以在循环的顶部添加一条if语句,以检查
xFile.Name
是否包含“Failed”:


这样,您将只在文件名文本中列出包含“失败”的文件。

如果要使用上述代码,则需要在循环中添加一些代码:

For Each xFile In xFolder.Files
    Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
    (ADD CODE HERE)
    rowIndex = rowIndex + 1
Next xFile
或者,您也可以在循环的顶部添加一条if语句,以检查
xFile.Name
是否包含“Failed”:



这样,您将只在文件名文本中列出包含“失败”的文件。

您会遇到什么错误?为什么需要宏?文件夹是否列在excel中?是否所有子文件夹以及这些子文件夹的子文件夹等?你能说得更具体一点吗?我没有收到任何错误,文件夹和子文件夹中的文件将在excel中列出,但我无法仅找到。文档文件&在文档文件中搜索失败的word并列出包含word failed的文件名。请帮助我修复此代码非常重要???为什么需要宏来搜索文档文件中的关键字?只需尝试在具有高级选项的文件夹中进行直接搜索。大约有100个word文件包含此关键字&我需要手动打开并检查每个文件您遇到了什么错误?为什么需要宏?文件夹是否列在excel中?是否所有子文件夹以及这些子文件夹的子文件夹等?你能说得更具体一点吗?我没有收到任何错误,文件夹和子文件夹中的文件将在excel中列出,但我无法仅找到。文档文件&在文档文件中搜索失败的word并列出包含word failed的文件名。请帮助我修复此代码非常重要???为什么需要宏来搜索文档文件中的关键字?只需在具有高级选项的文件夹中尝试直接搜索。大约有100个word文件包含此关键字&我需要手动打开并检查每个文件感谢您的帮助,但我需要在microsoft word文档中找到失败的word,因此现在我可以用_TESTSummary找到名称为的文件,但我需要访问word文档在word文档中查找word失败。您能帮助我吗?word文档有编辑限制或受保护文档2013。请帮助听起来您需要使用Microsoft Word API。选择文件后,您将希望创建Microsoft Word的实例(或使用现有实例);然后你需要打开文件并使用API命令操作它。可能你可以提供帮助吗?我对word API一无所知。谢谢你的帮助,但我需要在microsoft word文档中找到失败的word,所以现在我可以找到名为_TESTSummary的文件,但我需要访问word文档并找到word在word文档中失败。您能帮助我吗?word文档有编辑限制或受保护文档2013。请帮助听起来您需要使用Microsoft Word API。选择文件后,您将希望创建Microsoft Word的实例(或使用现有实例);然后你需要打开文件并使用API命令操作它。你能帮我吗?我对word API一无所知