こんばんは。よろしくお願いします。
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
No.1ベストアンサー
- 回答日時:
やりたい事がわからない。
index.html はどのフォルダーに作りたいのでしょうか。
一番上のフォルダーに 1個だけなのか、各フォルダーなのか。
Sub CreatePages1(rtFolder) の中で、rtFolder フォルダーに index.html を作ってますよね。
んでサブフォルダーの処理の中でも CreatePages1 プロシージャーを呼び出してますよね。
てことは各フォルダーの中に index.html を作りたいってこと?
私なりにテレパシーを使ってみました。
1. あるフォルダーをルート フォルダーとする。
2. ルート フォルダーにはサブフォルダーしかない。
3. サブフォルダーは複数階層になっている。
4. 各サブフォルダー内には拡張子 abc のファイルが置いてある。
5. 全ての *.abc ファイルと同じ名前の html ファイルを *.abc ファイルと同じフォルダーに作る。
6. 作成した各 html ファイルへのリンクを、ルート フォルダーの index.html に記述する。
※ コードがインデントして見えるのは全角スペースを使ってます。
※ コピペする場合は半角スペースに置換してください。
Option Explicit
' fso と indexPageTS は全体で使用。
Public fso, indexPageTS
Call Start()
' --------
' index.html を作成し、ヘッダーを記述。
' サブフォルダーの処理を DataFolderProc プロシージャーに任せる。
' index.html を閉じる。
' --------
Sub Start()
Set fso = CreateObject("Scripting.FileSystemObject")
' ルート フォルダーを参照
Dim rootFolder
Set rootFolder = fso.GetFolder("D:\root")
' index.html を作成
Set indexPageTS = fso.CreateTextFile(fso.BuildPath(rootFolder.Path, "index.html"), True)
' index.html のヘッダーを記述
indexPageTS.WriteLine "<html><head><title>Viewer</title></head><body>"
' ルート フォルダー内のサブフォルダーを処理
Dim dataFolder
For Each dataFolder In rootFolder.SubFolders
' サブフォルダー内での処理はすべて DataFolderProc に任せる
Call DataFolderProc(dataFolder)
Next
' index.html を閉じる
indexPageTS.WriteLine "</body></html>"
indexPageTS.Close
Set indexPageTS = Nothing
Set fso = Nothing
End Sub
' --------
' 受け取ったフォルダー内のデーター ファイルから html ファイルを生成し、
' index.html にリンクを記述する。
' サブフォルダーがあれば再帰呼び出しで潜って処理する。
' --------
Sub DataFolderProc(aFolder)
' フォルダー内のデーター ファイルに対応した html を作り、index.html にリンクを記述
Dim dataFile
For Each dataFile In aFolder.Files
If LCase(fso.GetExtensionName(dataFile)) = "txt" Then
' データー用の html を作成して中身を記述
Dim dataPageName, dataPageTS
dataPageName = fso.GetBaseName(dataFile.Name) & ".html"
Set dataPageTS = aFolder.CreateTextFile(dataPageName, True)
dataPageTS.WriteLine "<html><head><title>データー ファイル</title></head><body>あれやこれや</body></html>"
dataPageTS.Close
' index.html にリンクを記述
indexPageTS.WriteLine "<a href='" & fso.BuildPath(aFolder.Path, dataPageName) & "'>" & dataPageName & "</a><br/>"
End If
Next
' サブフォルダーがあれば再帰呼び出しで処理する
Dim subFolder
For Each subFolder In aFolder.SubFolders
Call DataFolderProc(subFolder)
Next
End Sub
お察しの通りです!
説明が雑で、お手間をとらせましてすみません。
いただいたコードを頼りに、明日また頑張ってみます。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のindex.htmlを作ってもい...
-
htmlでリンクに勝手にindex.htm...
-
XREA使用で作成したHTMLファイ...
-
1つ下の階層のフォルダに相対...
-
イントラネットURLの登録方法
-
http.confの読み方
-
Matlabでforやifを使わずに条件...
-
ムーバブルタイプで・・・
-
ホームを index.html から inde...
-
ホームページビルダー6サーバー...
-
サイトリニューアル時のリダイ...
-
トップページ「/index.html」の...
-
Excelで、社外秘(閲覧のみ)と...
-
HTMLからフォルダを開きたい
-
googleドライブで、PDFファイル...
-
Webサイトから、txtファイルを...
-
VBA URLDownloadToFileについて
-
form action="#"
-
htmlファイルの表示が真っ白
-
iPadの標準ブラウザでローカルH...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数のindex.htmlを作ってもい...
-
URLに「.html」の拡張子がなく...
-
1つ下の階層のフォルダに相対...
-
リンク先に日本語フォルダがあ...
-
フォルダ内の最初のファイル名...
-
XREA使用で作成したHTMLファイ...
-
フォルダにはダミーでもindex.h...
-
.htmと.htmlの違い
-
Application.OnTimeで引数付き...
-
index.htmlをつけると違う画面...
-
index.htmlファイルはどこに?
-
htmlでリンクに勝手にindex.htm...
-
URLにCGIのファイル名を出さな...
-
1つのドメインHP内に2つ<inde...
-
ホームを index.html から inde...
-
イントラネットURLの登録方法
-
全く同じファイルなのにホーム...
-
Apacheで、indexの拡張子別に優...
-
サーバー内のフォルダにある写...
-
トップページ「/index.html」の...
おすすめ情報