2016-06-27 5 views
1

Я сделал обширный поиск в Интернете, но все еще не смог найти решение. Интересно, что мой код работал раньше. Я использую HTML-страницу с VBScript код, открыт с помощью IE 9.Странная ошибка VBScript: Требуемый объект: 'objFolder'

Мой код ниже:

29: Function TraverseDirectory(objFolder, searchTerm, outFile) 
30: if objFolder.SubFolders.Count > 0 then <-- ERROR shown in this line: Object required: 'objFolder' 
31:  MsgBox objFolder.SubFolders.Count <-- This message is shown without an issue 
32:  Set fc = objFolder.SubFolders 
33:   For Each f1 in fc 
34:   ProcessFolder f1, searchTerm, outFile 
35:    TraverseDirectory f1, searchTerm, outFile 
36:   Next 
37: else 
38:  ProcessFolder objFolder, searchTerm, outFile 
39: end if 
40: End Function 

Я показываю ошибку в строке 30: требуется объект 'objFolder'

Я добавил окно сообщения в строке 31, и оно было достигнуто, выводя окно сообщения с количеством подпапок в папке с выдачей. Если проблема действительно была в строке 30, она никогда не достигнет линии 31. Если я полностью удалю строку 31 (ту, которая имеет окно сообщения), я все равно получаю ту же ошибку в строке 30.

Моя функция выше называется следующим образом:

Set objFolder = objFSO.GetFolder("C:\Test") 
TraverseDirectory objFolder, str, outFile 

Папка существует и извлекается без проблем. Не уверен, что происходит. Может кто-то пролить свет на этот вопрос?

+0

Я не могу воспроизвести проблему, но это * возможно * быть проблемой обзорной с 'переменной objFolder'. Можете ли вы проверить это, изменив 'objFolder' на нечто уникальное в функции, например' objFolderInsideFunction'? – langstrom

+1

Какой вывод из MSGBOX VarType (objFolder) & vbTab & TypeName (objFolder) 'между строками 29 и 30 и перед первым' TraverseDirectory'? – JosefZ

+0

выход «8 Папка», за которым следует «9 Nothing» – ElenaDBA

ответ

3

Следующая скрипт собирает/перекликается некоторую информацию отладки, как сообщили в my previous comment

option explicit 
'On Error Resume Next 
On Error GoTo 0 
Dim strResult: strResult = Wscript.ScriptName 
Dim objfso, str, outfile, objFolder 
set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("D:\TestC") 
'Set objFolder = objFSO.GetFolder("C:\attachments") 'an empty folder for debugging' 
Wscript.Echo "start" & vbTab _ 
    & VarType(objFolder) & " " & TypeName(objFolder) & vbTab & objFolder 
TraverseDirectory objFolder, str, outFile 
Wscript.Echo strResult 
Wscript.Quit 

Function TraverseDirectory(objFolder, searchTerm, outFile) 
    Dim fc, f1, aux 
    Wscript.Echo "debug" & vbTab _ 
     & VarType(objFolder) & " " & TypeName(objFolder) & vbTab & objFolder 
    aux = objFolder.SubFolders.Count 
    if aux > 0 then '<-- ERROR shown in this line: Object required: 'objFolder' 
     'MsgBox objFolder.SubFolders.Count ' <-- This message is shown without an issue 
     Set fc = objFolder.SubFolders 
      For Each f1 in fc 
       strResult = strResult & vbNewLine & Cstr(aux) _ 
        & vbTab & VarType(f1) & " " & TypeName(f1) & vbTab & f1 
       'ProcessFolder f1, searchTerm, outFile 
       TraverseDirectory f1, searchTerm, outFile 
      Next 
    else 
     'ProcessFolder objFolder, searchTerm, outFile 
     strResult = strResult & vbNewLine & Cstr(aux) & vbTab _ 
      & VarType(objFolder) & " " & TypeName(objFolder) & vbTab & objFolder 
    end if 
End Function 

отладки сценария:

==> tree "D:\TestC" 
Folder PATH listing for volume DataDisk 
Volume serial number is … … … 
D:\TESTC 
├───bubu 
│ └───foobar 
├───kuku 
├───New Folder 12 
└───New Folder 21 
    └───New folder XX 

Выходной показывает, что листает в дереве папок обрабатываются дважды, сценарий выше требуется больше мышления и отладки: обратите внимание, что вместо изменяется переменная strResult o первоначально оплащеннаяProcessFolder вызов:

==> cscript D:\VB_scripts\SO\38056552.vbs 
start 8 Folder  D:\testC 
debug 8 Folder  D:\testC 
debug 8 Folder  D:\testC\bubu 
debug 8 Folder  D:\testC\bubu\foobar 
debug 8 Folder  D:\testC\kuku 
debug 8 Folder  D:\testC\New Folder 12 
debug 8 Folder  D:\testC\New Folder 21 
debug 8 Folder  D:\testC\New Folder 21\New folder XX 
38056552.vbs 
4  8 Folder  D:\testC\bubu 
1  8 Folder  D:\testC\bubu\foobar 
0  8 Folder  D:\testC\bubu\foobar 
4  8 Folder  D:\testC\kuku 
0  8 Folder  D:\testC\kuku 
4  8 Folder  D:\testC\New Folder 12 
0  8 Folder  D:\testC\New Folder 12 
4  8 Folder  D:\testC\New Folder 21 
1  8 Folder  D:\testC\New Folder 21\New folder XX 
0  8 Folder  D:\testC\New Folder 21\New folder XX 
Смежные вопросы