VBS(Visual Basic Script)はWindows の汎用スクリプト言語で、Windowsに標準でついている便利なツールです。
Webのスクリプト言語では出来ない、ローカル処理を行う場合には有効です。ここではちょっと便利な簡単な使い方のサンプルを掲載します。
目次:ローカルファイルの入出力/内部ソート/処理状況表示/その他
テキストファイルの入出力 (サンプルの実行)
FileSystemObject オブジェクトを使用してWriteLine、ReadLineメソッドで書き込み、読込処理を行います。fileName = InputBox("ファイル名を入力してください。", "ファイル入出力", "C:\Users\Public\sample.txt") Set objFSO = CreateObject("Scripting.FileSystemObject") Set f = objFSO.OpenTextFile(fileName ,2,true) f.WriteLine("data 1") f.WriteLine("data 2") f.Close Set f = objFSO.OpenTextFile(fileName ,1) Do Until f.AtEndOfStream = True str = f.ReadLine data = data & str & vbCrLf Loop MsgBox data f.Close
UTF-8ファイルの入出力 (サンプルの実行)
ADO(ActiveX Database Object)の Stream オブジェクト(ADODB.Stream)を使用すると UTF-8 形式のテキストファイルを読み込み・書き込みが出来ます。fileName = InputBox("ファイル名を入力してください。", "ファイル入出力", "C:\Users\Public\sample.txt") Set f = CreateObject("ADODB.Stream") f.Open f.Type = 2 f.Charset = "UTF-8" f.LineSeparator = 10 f.LoadFromFile fileName f.WriteText "utf-8 data 1", 1 f.WriteText "utf-8 data 2", 1 ' 書き出しファイルの保存 f.SaveToFile fileName, 2 f.Close f.Open f.Type = 2 f.Charset = "UTF-8" f.LineSeparator = 10 f.LoadFromFile fileName '読込処理 Do Until f.EOS str = f.ReadText(-2) data = data & str & vbCrLf loop MsgBox data f.Close
ディレクトリファイル処理 (サンプルの実行)
指定したディレクトリーのファイル名をすべて表示します。
fileName = InputBox("ディレクトリー名を入力してください。", "ファイル情報一覧", "C:\Users\Public") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(fileName) For Each File In objFolder.Files strFiles = strFiles & File.Name & vbCrLf Next MsgBox strFiles
フォルダー処理 (サンプルの実行)
指定したディレクトリーのデイレクトリー名をすべて表示します。
fileName = InputBox("ディレクトリー名を入力してください。", "フォルダー名一覧", "C:\Users\Public") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(fileName) For Each objSubFolder In objFolder.SubFolders strFolder = strFolder & objSubFolder.Name & vbCrLf Next MsgBox strFolder
内部ソート (サンプルの実行)
ソート処理は「Fields.Append」でフィールドを定義して、「AddNew」でデータを渡して、「Sort 」でソート順を指定して、ソートした結果を「MoveFirst」、「MoveNext」で受け取ります。
Const adWChar = 130 Set Rs = CreateObject("ADODB.Recordset") 'フイールドの定義 Rs.Fields.Append "sKey", adWChar ,10 Rs.Fields.Append "sData", adWChar ,200 Rs.Open() 'データを渡す処理 Rs.AddNew Rs.Fields("sKey").value = "key3" Rs.Fields("sData").value = "データー 3" Rs.AddNew Rs.Fields("sKey").value = "key1" Rs.Fields("sData").value = "データー 1" Rs.AddNew Rs.Fields("sKey").value = "key4" Rs.Fields("sData").value = "データー 4" Rs.AddNew Rs.Fields("sKey").value = "key2" Rs.Fields("sData").value = "データー 2" 'ソート順の設定 jyun = InputBox("1:昇順、2:降順", "ソート順指定", "1") if jyun = 1 Then Rs.Sort = "sKey" Else Rs.Sort = "sKey DESC" End If 'ソート済データの取得 Rs.MoveFirst Do while not Rs.EOF str = str & Rs.Fields("sKey").Value & Rs.Fields("sData").Value & vbCrLf Rs.MoveNext Loop Rs.Close() MsgBox str
処理状況表示 (サンプルの実行)
実行するプログラムよりInternetExplorerを起動して、進捗状況のメッセージをHTML形式で書き出して、表示出来ます。
Set ie = CreateObject("InternetExplorer.Application") call ieInt() call ieMsg("*****開始*****") call ieMsg("*****処理中****") call ieMsg("*****終了*****") MsgBox "終了" call ieClose() Sub ieInt() With ie .Navigate("about:blank") .ToolBar = False .StatusBar = False .Width = 600 .Height = 200 .Document.Charset = "UTF-8" .Visible = True .Document.Title = "スクリプト実行中" End With End Sub Sub ieMsg(value) With ie .Document.Body.innerHTML = .Document.Body.innerHTML & value & "<br>" .Document.Script.setTimeout "javascript:scrollTo(0," & .Document.Body.ScrollHeight & ");", 0 End With End Sub Sub ieClose() ie.Quit Set ie = Nothing End Sub
HTA (サンプルの実行)※ダウンロード後にファイル識別子を「.hta」に変更して実行してください。
HTA(HTML Applications)はHTMLの機能をベースとしているので、HTMLを記述する感覚でアプリケーションの作成が出来ます。
その中にVBSの記述が可能で、HTMLと連携してテキストエリア、実行ボタン、HTMLでの結果表示などを使ったプログラミングが出来ます。
HTMLファイルの拡張子を「.html」から「.hta」に変更することで、Internet ExplorerはHTAのファイルとして認識して、実行します。
<html><head> <title>フォルダの一覧を表示</title></head> <body> <form name="form1"> <p>パスを入力してください<input type="text" name="path" value="" size="30"></p> <p><input type="button" value="実行" onClick="show_result()"><input type="reset" value="クリア"></p> <p><textarea name="kekka" cols="80" rows="30"></textarea></p> </form> <script language="VBScript"> 'HTMLタグのscript... から /script の間にVBSを書きます。 Dim objFSO Dim objFolder Set objFSO = CreateObject("Scripting.FileSystemObject") 'プログラム読込完了後の処理 Sub Window_OnLoad Window.ResizeTo 800,800 End Sub 'ファイル情報取得処理 Function listup_files() Dim strFiles Dim File For Each File In objFolder.Files strFiles = strFiles & File.Name & "(" & File.Size & ")" & File.Type & vbCrLf Next listup_files = strFiles End Function 'メイン処理(入力チェック、結果表示) Sub show_result() Dim strResult if document.form1.path.value = "" Then document.form1.kekka.value = "パスを入力してください" Exit Sub End if If objFSO.FolderExists(document.form1.path.value) = FALSE Then document.form1.kekka.value = "パス名が正しくありません" Exit Sub End If Set objFolder = objFSO.GetFolder(document.form1.path.value) strResult = listup_files document.form1.kekka.value = strResult End Sub </script> </body></html>