VBSエラー"オブジェクト型の変数は定義されていません"について(2)
こんばんは。よろしくお願いします。
CreatePages1は、あるルートフォルダ(rtFolder)にトップページ"index.html"をつくり(または上書きし)、そのルートフォルダの中にひとつだけあるフォルダ(sbFolder)以下のすべての階層のすべてのフォルダの中に存在する、拡張子がabc(仮称)のファイルと同じ名前のhtmlファイルを、abcファイルと同じフォルダに同じ数だけつくり(または上書きし)、トップページ"index.html"にその作成したすべてのhtmlファイルへのリンクを表示させる、という構想で作成中のVBSなのですが、これを実行すると「●(マル)」と書いた20行目のところでエラー「オブジェクト型の変数は定義されていません」となってしまいます。その前のEchoの結果は望みどおりになっていると思います。このエラーをどのように対処すればよいかを教えていただければと思います。
注)rtFolderにabcファイルはありません。
私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。
aSearchPatternに"*.abc"を代入したのに、▲(さんかく)と書いた行で拡張子"abc"を指定してしまっているのは、こうしないと全てのファイルについてhtmlファイルが作成されそうだったからです。よろしければ、このことも含めてご回答よろしくお願いします。
Option Explicit
Public fso, CurFolder, indexPageTS, otherPageTS, rtFolder, sbFolder, sbFolder2, _
dataFolder, aSearchPattern, aFiles, FileItem, currentFolder, Ext
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set CurFolder = fso.GetFolder(".")
Call CreatePages1(CurFolder, "*.abc", aFiles)
Set CurFolder = Nothing
Set fso = Nothing
'サブフォルダへの処理
Public Sub SearchSubFolder1(ByVal sbFolder)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
For Each sbFolder2 In sbFolder.SubFolders
WScript.Echo sbFolder
WScript.Echo sbFolder2
●(マル) If sbFolder2 <> "" Then
Call CreatePages1(sbfolder2, aSearchPattern, aFiles)
'再帰呼び出し
If sbFolder2 <> "" Then
Call SearchSubFolder1(sbFolder2)
End If
End If
Next
'オブジェクトの開放。
Set sbFolder2 = Nothing
Set fso = Nothing
End Sub
'htmlファイル作成
Public Sub CreatePages1(ByVal rtFolder, ByVal aSearchPattern, ByRef aFiles)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
'トップページを途中まで作成する。
Set indexPageTS = fso.CreateTextFile(rtFolder.Path & "\index.html", True)
indexPageTS.WriteLine "<HTML>"
(中略)
'データフォルダに各htmlファイルを作成する。
For Each dataFolder In rtFolder.SubFolders
If dataFolder <> "" Then
For Each FileItem In dataFolder.Files
If FileItem <> "" Then
Ext = fso.GetExtensionName(FileItem.Name)
▲(さんかく) If LCase(Ext) = "abc" Then
Set otherPageTS = fso.CreateTextFile(dataFolder.Path & "\" & Left(FileItem.Name, Len(FileItem.Name) - Len(Ext)-1) & ".html", True)
otherPageTS.WriteLine "<HTML>"
(中略)
otherPageTS.WriteLine "</HTML>"
otherPageTS.Close()
'トップページに各リンクを作成する。
Ext = fso.GetExtensionName(FileItem.Name)
If LCase(Ext) = "html" Then
indexPageTS.WriteLine "<a href=""" & rtFolder.Path & "\" & FileItem.Name & """>" & Left(FileItem.Name, Len(FileItem.Name) - Len(Ext)-1) & "</a><br>"
End If
End If
End If
Next
End If
Next
'トップページの続きを記述する。
indexPageTS.WriteLine "</BODY>"
indexPageTS.WriteLine "</HTML>"
indexPageTS.Close()
'データフォルダのサブフォルダへの処理。
For Each dataFolder In rtFolder.SubFolders
If dataFolder <> "" Then
Set currentFolder = fso.GetFolder(dataFolder.Path)
If currentFolder <> "" Then
Call SearchSubFolder1(currentFolder)
End If
End If
Next
'オブジェクトの開放。
Set currentFolder = Nothing
Set dataFolder = Nothing
Set indexPageTS = Nothing
Set otherPageTS = Nothing
Set fso = Nothing
End Sub
お礼
ご回答ありがとうございます。 <SCRIPT>にSubを2個記述するのは無理だ、とかそういう根本的な間違いがあるわけではないようですね。 とりあえずご指摘の箇所を訂正して、それでもだめだったらまた質問させていただきます。そのときはまたよろしくお願いします。