dポイントプレゼントキャンペーン実施中!

こんばんは。まず、状況の説明と、やりたいことの箇条書きです。
1. あるフォルダー"root"をルートフォルダーとする。
2. ルートフォルダーにはフォルダ"abcdata"とindex.htmlとmystyle.cssがある。
3. フォルダ"abcdata"にはサブフォルダー1つしかない。
4. サブフォルダーは複数階層になっている。
5. 各サブフォルダー内には拡張子 abc のファイルが置いてある。
6. index.html上のボタン"refresh"をクリックすると、サブプロシージャー"Start"が働く。
7. サブプロシージャー"Start"は、全ての *.abc ファイルと同じ名前の html ファイルを *.abc ファイルと同じフォルダーに作り、作成した各 html ファイルへのリンクを、ルートフォルダーの index.html に記述する。
8. index.html におけるリンクの表示は、階層ごとにインデント適用する。
下記、引用のソースは、index.htmlを写したものです(具体的な数値等は伏せてあります)。そこにうめこまれた"refresh"ボタンを押すとサブプロシージャー"Start"を起動され、index.html自身が書きかわるようにしたいのですが、うまくいきません(IEの左下のところに「ページでエラーが発生しました」と出ます)。どうすればよいでしょうか。
私はExcelのVBAは少し経験がありますが、VBSを書いたのはこれが初めてです。HTMLやCSSはまったくの初心者です。ようやくフォントサイズの絶対指定ができた程度です。よろしくお願いします。
<HTML><HEAD><TITLE>Viewer</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Start(ByRef i)
Set fso = CreateObject("Scripting.FileSystemObject")
Set rootFolder = fso.GetFolder(".")
'index.htmlを作成
Set indexPageTS = fso.CreateTextFile(fso.BuildPath(rootFolder.Path, "index.html"), True)
indexPageTS.WriteLine "<HTML>"
(ヘッダーは省略:文字数節約のため)
indexPageTS.WriteLine "<BODY text=""#000000"" link=""#0000FF"" alink=""teal"">"
indexPageTS.WriteLine "<span style="width:100%; filter:DropShadow(color=#CCCCFF,direction=135)"><font color=""Navy""; size= 6pt>abcdata</font></span><br>"
indexPageTS.WriteLine "<br>"
indexPageTS.WriteLine "<input type=""button"" value=""reload"" onclick=""location.reload()"">"
indexPageTS.WriteLine "<input type=""button"" name=""InputBtn"" onclick=""Start(1)"" value=""refresh"">"
indexPageTS.WriteLine "<br>"
'各サブフォルダーへの処理はDataFolderProcに任せる
Set accessoryFolder = fso.GetFolder(".\abcdata")
For Each dataFolder In accessoryFolder.SubFolders
i = 1
Call DataFolderProc(dataFolder, i)
Next
indexPageTS.WriteLine "</p>"
indexPageTS.WriteLine "</BODY>"
indexPageTS.WriteLine "</HTML>"
indexPageTS.Close()
Set indexPageTS = Nothing
Set fso = Nothing
End Sub
indexPageTS.WriteLine "<br>"
Sub DataFolderProc(aFolder, n)
For Each dataFile In aFolder.Files
If LCase(fso.GetExtensionName(dataFile)) = "abc" Then
linkName = fso.GetBaseName(dataFile.Name)
dataPageName = fso.GetBaseName(dataFile.Name) & ".html"
Set dataPageTS = aFolder.CreateTextFile(dataPageName, True)
dataPageTS.WriteLine "<HTML>"
'(中略:各htmlファイルへの記述がここに入る)
dataPageTS.WriteLine "</HTML>"
dataPageTS.Close()
'index.htmlに各リンクを張る
indexPageTS.WriteLine "<p style=""text-indent:" & n & "em"><a target=""_blank"" href='" & fso.BuildPath(aFolder.Path, dataPageName) & "'>" & linkName & "</a>"
End If
Next
'サブフォルダーがあれば同様に処理する
For Each subFolder In aFolder.SubFolders
n = n + 1
Call DataFolderProc(subFolder, n)
Next
End Sub
-->
</SCRIPT>
<LINK REL="stylesheet" TYPE="text/css" HREF="mystyle.css">
</HEAD>
<BODY text="#000000" link="#0000FF" alink="teal">
<span style="width:100%; filter:DropShadow(color=#CCCCFF,direction=135)"><font color="Navy"; size= 6pt>abcdata</font></span><br>
<br>
<input type="button" value="reload" onclick="location.reload()">
<input type="button" name="InputBtn" onclick="Start(1)" value="refresh">
<br>
<p style="text-indent:1em"><a target="_blank" href='C:\root\abcdata\a\abcde</a>
'(中略:各リンク)
</p></BODY></HTML>

A 回答 (1件)

動作上のバグはともかく、次の点は明らかに間違いです。


(1)(ヘッダーは省略:文字数節約のため)
 コメントになっていない。
(2)indexPageTS.WriteLine "<span style="width:~
 引用符が二重になっていない。
(3)indexPageTS.WriteLine "<br>"
 どのメソッドにも属さないので、真っ先に実行される。
 但し、オブジェクト未設定なのでエラーになる。
(4)indexPageTS.WriteLine "<p style=""text-indent:" & ~
 引用符の閉じ方が間違っている。

タグの設定はアポストロフィでも良いので、次のように
書き直してみては如何でしょう。
indexPageTS.WriteLine "<span style='width:~'>"
また、変数の誤記防止のため、Option Explicit宣言を入れ、
変数は定義してから使用するようにします。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
<SCRIPT>にSubを2個記述するのは無理だ、とかそういう根本的な間違いがあるわけではないようですね。
とりあえずご指摘の箇所を訂正して、それでもだめだったらまた質問させていただきます。そのときはまたよろしくお願いします。

お礼日時:2010/02/17 06:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!