VBS(Visual Basic Script)おぼえがき

WSHVBAVBSサイトマップホーム

VBS(Visual Basic Script)はWindows の汎用スクリプト言語で、Windowsに標準でついている便利なツールです。
Webのスクリプト言語では出来ない、ローカル処理を行う場合には有効です。ここではちょっと便利な簡単な使い方のサンプルを掲載します。

目次:ローカルファイルの入出力内部ソート処理状況表示その他

ローカルファイルの入出力

テキストファイルの入出力 (サンプルの実行

FileSystemObject オブジェクトを使用してWriteLine、ReadLineメソッドで書き込み、読込処理を行います。
OpenTextFileメソッドのパラメータで処理の詳細を指定します。パラメータの引数は以下のとおり指定します。
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>

WSHVBAVBSサイトマップホーム