VBSエラー「オブジェクト型の変数は定義されていません」となる原因と対処方法

このQ&Aのポイント
  • VBSエラー「オブジェクト型の変数は定義されていません」とは、VBSスクリプトでオブジェクト型の変数が定義されていない状態で参照された場合に発生するエラーです。
  • このエラーの原因は、変数の宣言やオブジェクトの生成を行わずに変数を使用した場合や、変数に値が代入されていない状態で参照した場合に発生します。
  • 対処方法としては、エラーが発生している箇所で変数の宣言やオブジェクトの生成を行うなどして、変数が適切に定義されるようにする必要があります。また、変数がnullや空でないことを確認するなど、値が正しく代入されていることも重要です。
回答を見る
  • ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
回答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

quicon9ue
質問者

お礼

お察しの通りです! 説明が雑で、お手間をとらせましてすみません。 いただいたコードを頼りに、明日また頑張ってみます。 ありがとうございます!

関連するQ&A

  • VBSエラー"オブジェクト型の変数は定義されていません"について

    以下のコードは、あるルートフォルダにトップページ"TOP.html"をつくり(または上書きし)、各階層のフォルダの中に存在する拡張子がabc(仮称)のファイルと同じ名前のhtmlファイルを、abcファイルと同じフォルダに同じ数だけつくり(または上書きし)、トップページにその作成したすべてのhtmlファイルへのリンクを表示させる、という構想で作成中のVBSなのですが(具体的な数値等は"****"としました)、これを実行すると「●(マル)」と書いた55行目のところでエラー「オブジェクト型の変数は定義されていません」となってしまいます。このエラーをどのように対処すればよいかを教えていただければと思います。 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。14・15行目の呼び出し方はこれでいいのかどうかも不安です。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set CurFolder = fso.GetFolder(".") Call CreatePages1(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing 'サブフォルダへの処理 Public Sub SearchSubFolder1(ByVal folder) Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set folder2 = fso.GetFolder(folder.Path) For Each folder2 In folder.SubFolders Call CreatePages1(folder2, searchPattern, files) '再帰呼び出し Call SearchSubFolder1(folder2) Next Set fso = Nothing End Sub 'htmlファイル作成 Public Sub CreatePages1(ByVal folder, ByVal searchPattern, ByRef files) Set fso = WScript.CreateObject("Scripting.FileSystemObject") 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\TOP.html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Viewer</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>Browser</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""Browser1"" WIDTH=**** HEIGHT=**** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""*****"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then ●(マル) outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'サブフォルダへの処理。 Set fp = fso.GetFolder(folder.Path) Call SearchSubFolder1(fp) End Sub

  • VBS について

    以下のスクリプトは、あるフォルダ以下の(サブフォルダを含む)abcファイル(仮称)すべてについて同じ名前でhtmlファイルをつくると同時に、そこへリンクするメニューのページを上書きする、という構想で書いたものですが、実行すると2行目で ')'がありません というエラーが出てしまいました。(具体的な数値等は"****"としました) 私はExcelのVBAは多少の経験がありますが、VBScriptを書いたのはこれが初めてで、HTMLも未経験です。 "')'がない"というのはどういうことなのか、このエラーをどのように対処すればよいかを教えていただければと思います。よろしくお願いします。 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Public Sub GetAllFiles(ByVal folder As String, ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する。 Dim fs As String() = System.IO.Directory.GetFiles(folder, searchPattern) 'トップページを途中まで作成する。 Set outFileStream = fso.CreateTextFile(folder.Path & "\***", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>****</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" '各htmlファイルを作成する。 For Each fs In folder.Files Set outFileStream = fso.CreateTextFile(folder.Path & "\" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & ".html", True) outFileStream.WriteLine "<HTML>" outFileStream.WriteLine "<HEAD>" outFileStream.WriteLine "<TITLE>***</TITLE>" outFileStream.WriteLine "</HEAD>" outFileStream.WriteLine "<BODY>" outFileStream.WriteLine "<OBJECT ID=""****"" WIDTH=*** HEIGHT=*** CLASSID=""CLSID:****"">" outFileStream.WriteLine "<PARAM NAME=""_Version"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentX"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_ExtentY"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""_StockProps"" VALUE=""***"">" outFileStream.WriteLine "<PARAM NAME=""FileName"" VALUE=""" & folder.Path & "\" & fs.Name & """>" outFileStream.WriteLine "</OBJECT>" outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'トップページの続きを作成する。 Ext = fso.GetExtensionName(fs.Name) If LCase(Ext) = "html" Then outFileStream.WriteLine "<a href=""" & folder.Path & "\" & fs.Name & """>" & Left(fs.Name, Len(fs.Name) - Len(Ext)-1) & "</a><br>" End If Next outFileStream.WriteLine "</BODY>" outFileStream.WriteLine "</HTML>" outFileStream.Close() 'folderのサブフォルダを取得する。 Dim ds As String() = System.IO.Directory.GetDirectories(folder) 'サブフォルダへの処理も行う。 Dim d As String For Each d In ds GetAllFiles(d, searchPattern, files) Next d End Sub Set CurFolder = fso.GetFolder(".") GetAllFiles(CurFolder, "*.abc", files) Set outFileStream = Nothing Set CurFolder = Nothing Set fso = Nothing

  • VBSで指定したフォルダー内のファイルを書き出さないようにする

    あるフォルダ以下のファイル名を出力ファイル、f.name.txtに書き出すのですが "新しいフォルダ"というフォルダのなかにあるファイルは書き出さないようにしたいのですが、意に反してフォルダー内の全てのファイル名を書き出してしまいます。どこがおかしいのでしょう? ********************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name FolderCheck=Folder & "\" & "新しいフォルダ" If Folder <> FolderCheck Then abc.Write Folder & "\" & Fname & vbCrLf End If Next For Each Subfolder in Folder.SubFolders 'Foler内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • 再度:VBSで指定したフォルダー内のファイルを書き出さないようにする

    先ほども似たような質問をしました。 あるフォルダの中にあるファイル名の一覧をファイル"f.name.txt"を書き出したいのですが"新しいフォルダ"のなかにあるファイルは書き出さないようにしたいです。下記のVBSは"新しいフォルダ"のなかに更にフォルダが階層的に存在するときには"新しいフォルダ"の中のファイルも全て書き出してしまいます。 "新しいフォルダ"の中にフォルダがない場合は正しく動きます。 "新しいフォルダ"の中にフォルダが階層的にあっても"新しいフォルダ" の中にあるファイル名を書き出さないようにするにはどうしたらよいのでしょう? ************************************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) If Folder.Name <> "新しいフォルダ" Then For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name abc.Write Folder & "\" & Fname & vbCrLf Next End If For Each Subfolder in Folder.SubFolders 'Folder内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

  • VBScriptでファイル検索

    こんにちは。 Dドライブのどこかにある「あいうえお.xls」ファイルのパス をメッセージ表示するようなスクリプトを作りましたが、上手 く表示されません。どこに不具合があるのか、ご教授ください。 お願いいたします。 Option Explicit Dim FSO,File,SubFolder Set FSO = CreateObject("Scripting.FileSystemObject") ShowSubfolders FSO.GetFolder("D:\") Sub ShowSubFolders(Folder) For Each File in Folder.Files If File.Name = "あいうえお.xls" then      Wscript.Echo File.path End If Next For Each Subfolder in Folder.SubFolders ShowSubFolders Subfolder Next Set FSO = Nothing End Sub

  • htmlのボタンでVBSのプロシージャを起動

    こんばんは。まず、状況の説明と、やりたいことの箇条書きです。 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>

    • ベストアンサー
    • HTML
  • VBSでファイルをコピーして名前変更

    VBSで現在下記のようなコードを組んでいます。 動作としてはコードが組んであるVBSファイルにエクセルシートをドラック&ドロップすると、ブックのパスが外れてファイル名の先頭に シート内のセルE5の文字がつくようになっています。 そしてそのファイル名に指定した文字がある場合 指定したフォルダへ移動されます。 今回行いたいのは、その移動したあとの処理で 移動したファイルをそのフォルダ内でコピーして 名前を変更したいです。 例えば移動してきたファイル名が #101-1test.xlsxだとして、そのファイルをコピーして ABC101-1_DEFG.xlsxという名前で同じフォルダ内にコピーしたい。 ファイルの中身は同じだけど、名前を変更して同じフォルダ内に ファイルを作成したいということです。 ちなみに移動してきた時の始めのファイル名、#〇〇〇-〇は必ずこの形です。 なので、頭のシャープと-1以降の文字を削除して 〇〇〇の手前につける文字と、-〇以降につける文字が指定できれば完璧です。 このようなことができるかわかりませんが、よろしくお願いします。 よろしくお願いします。 Option Explicit 'Excel 2013 Later Japenese Version Available 'REF: 'REF: '''///---定数の設定Set Enumuragion---///''' Const PWD="aaaaa" Const msoLanguageIDInstall = 1 '''///---変数の宣言---///''' Dim objArgs, I , strFile Dim objFile, objFolder,objPath,strScr Dim xlApp,Wb Dim objWShell : Set objWShell = Createobject("WScript.Shell") Dim FSO : Set FSO = Createobject("Scripting.FileSystemObject") '''///---ファイル処理開始 Start Document File Conversion---///''' Set objArgs = Wscript.Arguments For I = 0 to objArgs.Count-1 set objFile = FSO.GetFile(cstr(objArgs(I))) If Lcase(Left(FSO.GetExtensionName(objFile.Path) ,4) )="xlsx" Then Set xlApp =CreateObject("Excel.Application") If xlApp.Version < 14 Then xlApp.Quit: Set xlApp = Nothing:wscript.Quit xlApp.DisplayAlerts=False xlApp.Visible = False set wb=xlapp.WorkBooks.Open(objFile.Path,0,false,,PWd,,True,,false,false,,true,true) if wb.HasPassword=true then wb.Saveas objFile.Path,,"","",False else wb.Saveas objFile.Path,,Pwd,"",False End if Dim n n = wb.Worksheets(1).Range("E5").Value & "_" & wb.Name wb.close FSO.GetFile(objFile.Path).Name = n If Mid(objFile.name, 5, 2) = "-1" Then FSO.MoveFile objFile.path, "F:\A\" Else MsgBox objFile.Name & " 該当せず" End If set wb=nothing End If Next xlApp.DisplayAlerts=True xlApp.Quit set xlApp = Nothing

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • エクセルブックの複製(.vbs)

    「原紙」という名前のエクセルブックがあり、新しいお客様が増えたらそのブックを複製し、更にその時にダイアログを出してお客様の名前を入力し、それをファイル名にしたいです。 下記の.vbsファイルに元ファイルをドラッグすると連番を付けて複数作る、という目的でのコマンドを見つけました(これも凄いですが)。 もし改良出来る方がいたら教えてください。 ・コピー数の指定は必要ありません(毎回1ファイルのみ複製)。 ・ドラッグすると、ダイアログが出てきて入力したものがファイル名になる。 よろしくお願い致します。 If WScript.Arguments.Count = 0 Then WScript.Quit Dim fso Set fso = CreateObject( "Scripting.FileSystemObject" ) '--- コピー元ファイルの確認 filePath = WScript.Arguments.Item(0) If fso.FileExists( filePath ) = False Then WScript.Echo filePath & "がありません" WScript.Quit End If '--- コピー数の指定 Num = InputBox( filePath & vbNewLine & "をいくつコピーしますか") If IsNumeric( Num ) = False Then WScript.Echo "数値を入力してください。" WScript.Quit End If If Num > 999 Or Num < 1 Then WScript.Echo "数値は1~999で指定してください。" WScript.Quit End If Extention = "." & fso.GetExtensionName( filePath ) '--- ファイルチェック For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) If fso.FileExists( newFilePath ) = True Then WScript.Echo "作成予定のファイル【" & newFilePath & "】が既に存在します。" WScript.Quit End If Next '--- ファイルコピー For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) fso.CopyFile filePath, newFilePath Next

専門家に質問してみよう