Object不支持此属性或方法:folder.GetFolder

时间:2014-07-01 15:12:47

标签: vbscript

我的代码中的这个函数一直出错。

Function Recurse(oFldr)
    If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
        For Each oSubFolder In oFldr.SubFolders
            Recurse oSubFolder

            'For Each oFile In oFldr.Files  
            For Each oFile In oFldr.Files

                If LCase(oFSO.GetExtensionName(oFile)) = "txt" Then
                    ContentSearchTxt(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "doc" Or "docx" Then
                    ContentSearchWord(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "xls" Or "xlsx" Then
                    ContentSearchExcel(oFile)
                End If
            Next
        Next
    End If
End Function

我的第一个if statement

似乎引发了错误
If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then

我真的很擅长使用VBS,并且想知道是否有人能够让我朝着正确的方向前进?

2 个答案:

答案 0 :(得分:2)

.GetFolder是FileSystemObject的一种方法。所以改变

If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then

If IsAccessible(oFSO.GetFolder(sSearchRoot)) Then

其中oFSO定义为

Set oFSO = CreateObject("Scripting.FileSystemObject")

答案 1 :(得分:0)

问题可能是您传递给此函数的参数。

Function Recurse(oFldr)之前

添加

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFldr = oFSO.GetFolder("C:\Root_Dir_To_Recurse")
Recurse oFldr

同样,当以这种方式调用函数时,不需要If语句。

每个oSubFolder的“下一步”都在错误的位置。

此外,您的“或”语句中也有错误。以下是函数的修改版本,其中If和End If已注释掉。 OR语句也已被修改。你不能简单地使用OR来指定不同的值,你必须使OR成为另一个条件,而不仅仅是另一个值。

以下是您的功能的修改版本。看到这个函数没有返回值我也建议您将它更改为Sub例程,如下所示:

Sub Recurse(oFldr)
    'If IsAccessible(oFldr.GetFolder(sSearchRoot)) Then
        For Each oSubFolder In oFldr.SubFolders
            Recurse oSubFolder
        Next

            'For Each oFile In oFldr.Files  
            For Each oFile In oFldr.Files

                If LCase(oFSO.GetExtensionName(oFile)) = "txt" Then
                    ContentSearchTxt(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "doc" Or LCase(oFSO.GetExtensionName(oFile)) = "docx" Then
                    ContentSearchWord(oFile)
                End If

                If LCase(oFSO.GetExtensionName(oFile)) = "xls" Or LCase(oFSO.GetExtensionName(oFile)) ="xlsx" Then
                    ContentSearchExcel(oFile)
                End If
            Next

    'End If
End Sub