VBSでメッセージボックスを表示させる方法とsleep関数によるウェイト時の注意点

VBSの簡単な使い方のアイキャッチ画像仕事
スポンサーリンク

VBSを使えば簡単にメッセージボックスのポップアップを表示させることができます。

たとえば、タスクスケジューラにメッセージボックスをポップアップさせるVBSを登録しておけば、きまった時間に打合せなどがある場合にポップアップで通知させるような使い方もできるので使って見ると結構便利です。

ちょっと暇な時間に作ってみたので、備忘も兼ねてご紹介します。

vbsでメッセージボックスを表示させる方法

vbsの作り方は超簡単!3ステップでできあがりです。

1.まずはテキストファイルを用意します。

[新規作成]-[テキストドキュメント]

2.任意の名前にして、拡張子を.vbsで保存します。

今回はメッセージを出力するVBSなので、msg.vbsにしました。

3.作成したファイルを右クリックして[編集]を選択。

以下を入力して保存する。

※以前まではWordpressのデフォルトで入っている設定により""が大文字になってしまう現象が発生していましたが、設定を修正したので以下コピペでvbsが作成出来ます。

これだけです。めちゃめちゃ簡単ですよね。

MsgBox "打ち合わせ5分前です", ,"title

これでメッセージボックスを出力するためのvbsファイルは作成できました。

作成したファイルをダブルクリックで実行してテストしてみましょう。

上の画像のようにメッセージボックスが表示されていれば成功です。

このままでも良いのですが、少しだけメッセージ内容を変えてみます。
メッセージボックスに現在の日付と時刻を入れてみましょう。

「終了していない文字列型の定数です」とエラーが表示されてしまう場合

VBS スクリプトとして使えるのは ANSI か UTF16 のみです。
ファイルのエンコードがVBSに対応していないものになっている可能性が考えられます。
作成したvbsファイルを右クリックして[編集]-[ファイル]から[名前を付けて保存]から
「文字コード」を確認します。

ANSIかShift_JIS以外の文字コードでエンコードされていた場合は、ANSIかShift_JISを文字コードに指定して上書きすることでVBSファイルのエンコードが変更できます。

VBSで日付と日時を出力させる

日付はdate、日時はtimeで出力させることができます。

また、間に&(アンパサンド)を入れることで、それぞれの出力結果をつなぎ合わせることができます。

 ・Nowは、システムの現在の「日付と時刻」を返す関数です。
 ・Dateは、システムの現在の「日付」を返す関数です。
 ・Timeは、システムの現在の「時刻」を返す関数です。
 ・&は、関数の出力結果をつなぎ合わせるときに使います。

vbsので日付や時刻を出力させる方法は超簡単!2ステップでできあがりです。

作成したファイルを右クリックして[編集]を選択。
以下を入力して保存します。

MsgBox Now & "打ち合わせ5分前です", ,"title"

もしくは、

MsgBox Date & Time & "打ち合わせ5分前です", ,"title"

どちらも↓のような画像の結果になります。

このままだと、日付、時刻、メッセージ内容が改行されていないので見づらいですよね。

なので、それぞれの出力結果を改行させてみましょう。

さらに、改行を応用して日時とメッセージの間に空白(ブランク)を入れたいと思います。
ついでにメッセージボックスのタイトルも変更しておきましょう。

改行はvbCrLfで対応できます。

MsgBox Date & vbCrLf & Time & vbCrLf &""& vbCrLf &"打ち合わせ5分前です", ,"警告"

上記の内容でvbsファイルを変更、保存します。

変更したvbsを実行してみると

大分良い感じになってきたんじゃないでしょうか?
メッセージの内容やタイトルは適宜好きなように修正してください。

Sleepでウェイトを入れてみる

打ち合わせ5分前、4分前、3分前・・・とメッセージボックスを1分間隔で出力させる場合は同じようなスクリプトファイルを作成してタスクに登録する方法もありますが、複数タスクを登録するのってちょっと面倒ですよね。

WScript.Sleep 関数でvbsの処理にウェイトを入れたらどうなるでしょうか。
ちょっと試してみました。

MsgBox Date & vbCrLf & Time & vbCrLf &""& vbCrLf &"打ち合わせ5分前です", ,"警告"
WScript.Sleep 60000
MsgBox Date & vbCrLf & Time & vbCrLf &""& vbCrLf &"打ち合わせ4分前です", ,"警告"

処理と処理の間にウェイトを入れて、60秒間後に次のメッセージボックスが出力されるようになります。

WScript.Sleep 60000という表記は、1/1000秒(1ミリ秒)なので、60秒のウェイトがかかるようになります。

Sleep関数でウェイトを入れる場合の問題点

何度かテストしてみると、sleep関数でウェイトを入れた際の問題点が見つかりました。

問題点とは、「Sleep関数で複数処理にウェイトを入れた場合、実際の時間と処理が開始されるまでの時間でずれが生じてしまう」というもの。

Sleep関数でのウェイトの問題点
Sleep 関数でのウェイトがカウントされるのは、先の処理が完了した瞬間からです。
つまり、先のメッセージボックスを[OK]もしくは[×]で閉じられた瞬間からウェイトがカウントされます。
・1つ目の処理が完了されるタイミングは、常に一定ではないので2つ目の処理が開始されるまでの時間にずれが生じてしまいます。

sleep関数で単純にウェイトをかけた場合、2つ目の処理開始に時間のずれが生じることが分かりました。

上の図では、60秒だと分かりずらい為、6秒後に2つ目の処理が開始される場合を例に図解しています。

この問題は実際にvbsを作ってみるまで気づきませんでした。

定刻で2つ目の処理を開始させたい場合

1つ目の処理の開始時間をvbs内部で取得(now関数とか)して1度変数に代入、その値を元に2つ目の処理が開始されるようにするなど工夫しなくてはいけないかも知れないですね。

もしくは、1つ目の処理と2つ目の処理を異なるvbsに分けて、定刻になったらそれぞれのvbsを呼び出すバッチファイルを作成するとか

色々と対処の方法はあるかと思われます。

この記事のまとめ

vbsを活用すると、簡単にメッセージボックスを出力させることができます。

date関数やnow関数、time関数を応用することで、時間や現在時刻を取得することができます。

vbsの出力結果を改行したい場合は、vbCrLfで対応できます。

作成したvbsファイルをWindowsのタスクスケジューラに登録することで、決まった時間にメッセージボックスのポップアップを表示させることもできます。

1つのvbsの中で処理と処理の間にsleepを入れる場合、1つ目の処理完了からsleepで指定した時間のウェイトが開始されますので、2つ目の処理開始までに実際の時間とのずれが生じる可能性がありますので、この点はご注意ください。

コメント

タイトルとURLをコピーしました