我的代码中的这个函数一直出错。
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,并且想知道是否有人能够让我朝着正确的方向前进?
答案 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