忍者ブログ

VBScriptで進捗状況を表示する方法~プログレスファイル出力~

2022年09月13日
エクセルVBAで時間のかかる処理をさせるときは、
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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字