VBScriptで進捗状況を表示する方法~プログレスファイル出力~
2022年09月13日
エクセルVBAで時間のかかる処理をさせるときは、
application.statusbar で進捗状況を表示できる。
でもVBScriptだとWindows上で動作するので表示するアプリケーションがない。
検索すると、IEオブジェクトを使ってプログレスバーを表示することができるようだ。
う~ん。めんどい!
IEオブジェクトなんてわかんないもんね。
なんかしら表示が出れば・・・
application.statusbar で進捗状況を表示できる。
でもVBScriptだとWindows上で動作するので表示するアプリケーションがない。
検索すると、IEオブジェクトを使ってプログレスバーを表示することができるようだ。
う~ん。めんどい!
IEオブジェクトなんてわかんないもんね。
なんかしら表示が出れば・・・
そうだ!ファイル名を使って表示しちゃおう!
で、作ってみた。簡単に要点の説明。
Wscript.scriptFullname:VBScriptのフルパスを取得。
instrrev(myPath , "\"):右から\を検索した位置
左から最後の\までを取得するとフォルダパスを取得できる。
ファイルシステムオブジェクトとフォルダオブジェクトを使って、
テキストファイルを作成。拡張子はプログレスっぽいのを適当に設定。
テキストファイルを作る前に、.prgrsファイルを削除。
ファイルがないとエラーを吐くので、削除モジュールではエラーを無視。
処理の全体数をどうやって取るかってのが問題で、
これを作るきっかけになったプログラムには適用できなかった・・・。残念。
複数のVBScriptを同時に動かすと、.prgrsファイルを取り合いになっちゃうので、
処理開始日時か実行対象のVBSのファイル名を.prgrsファイル名に使えば
多少緩和できそう。
ちょっとそこまで手が出なかったけど、短いソースでいい感じのができたので公開。
以下、ソース。ソースファイルはこちら。(内容同じだけど)
Option Explicit
dim text:text ="400件/750件"
call outputprogress(text)
sub outputProgress(text)
call deletePrgrsFile
call makePrgrsFile(text)
end sub
'------------------------------
' メイン処理
'------------------------------
Sub makePrgrsFile(text)
dim myPath : myPath = Wscript.scriptFullname
dim yPos : yPos = instrrev(myPath , "\")
dim strFile: strFile = left(myPath,yPos) & "VBS進行率:" & text & ".prgrs"
dim objFS: Set objFS = CreateObject("Scripting.FileSystemObject")
dim obfFile : Set obfFile = objFS.CreateTextFile(strFile) ' ファイル作成
set objFS = nothing
set obfFile = nothing
end sub
sub deletePrgrsFile()
on error resume next
dim myPath : myPath = Wscript.scriptFullname
dim yPos : yPos = instrrev(myPath , "\")
dim tarFile:tarFile = left(myPath,yPos) & "*.prgrs"
with CreateObject("Scripting.FileSystemObject")
.DeleteFile tarFile
end with
end sub
PR
Comment