こんばんは。よろしくお願いします。
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.OnTimeで引数付き...
-
Apacheで、indexの拡張子別に優...
-
1つ下の階層のフォルダに相対...
-
複数のindex.htmlを作ってもい...
-
サーバー内のフォルダにある写...
-
HTMLの階層について
-
全く同じファイルなのにホーム...
-
1つのファイルを 100 のフォル...
-
サイトリニューアル時のリダイ...
-
Excelで、社外秘(閲覧のみ)と...
-
HTMLからフォルダを開きたい
-
iPadの標準ブラウザでローカルH...
-
【HTML】1クリックで複数ファイ...
-
Dreamweaverでソースが文字化け...
-
社内で利用するWebサイトを立ち...
-
VBA URLDownloadToFileについて
-
Webサイトから、txtファイルを...
-
htmlの中にexcelが埋め込むには...
-
<a href="/">トップへ</a> こ...
-
一つのリンクに複数のURLを指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1つ下の階層のフォルダに相対...
-
複数のindex.htmlを作ってもい...
-
URLに「.html」の拡張子がなく...
-
リンク先に日本語フォルダがあ...
-
フォルダ内の最初のファイル名...
-
XREA使用で作成したHTMLファイ...
-
URLの.html省略について
-
ホームを index.html から inde...
-
フォルダにはダミーでもindex.h...
-
リンクのindex.html省略
-
htmlでリンクに勝手にindex.htm...
-
index.htmlファイルはどこに?
-
[URL] "*/index.cgi" を "*/" ...
-
複数のindex.htmlが存在するホ...
-
.htmと.htmlの違い
-
イントラネットURLの登録方法
-
htmlとindex/htmlの違い SEO
-
Application.OnTimeで引数付き...
-
htaccessでURL末尾にスラッシュ...
-
HTMLの階層移動
おすすめ情報