小さなフォームが開いて、一定時間後に閉じるといった、いわばささやくメッセージです。
長い時間のかかった処理が終了したことを知らせるとか、処理の途中経過を知らせるとか、要するに安心のためにちょっとした情報を表示するだけの、インターラクティヴでないフォームです。「耳打ち」ともいえますね。
左のようなユーザーフォームを用意します。
名前は "WhisperMessageForm" としました。中にいれるコントロールは "massageLabel" ひとつだけです。このラベルの大きさは、親フォームの大きさにあわせてフィットさせておきます。複数行の表示ができるように、WordWrap = True としておきましょう。
コードは下のとおり。waitTime にミリ秒単位で数値を入れておくと、このフォームが表示されてその時間が経過すると自動的に消えます。それだけです。0 秒を指定すると、フォームのクローズボタンを押すまで消えません。
ユーザーフォーム WhisperMessageForm
Public waitTime Private Sub UserForm_Activate() If waitTime = 0 Then Exit Sub Application.Wait [now()] + waitTime / 86400000 Unload Me End Sub
このフォームは、WhisperMessage() によって、次のように呼び出されます。
複数行の文字列を "○○" & vbCrLf & "○○" & vbCrLf & ・・・ と記載するのが面倒なので、"○○/〇〇/・・・" と記載して、後で / を改行に変換してもらえるよう、connectString() を用意しておきました。
標準モジュール WhisperMessage()
'----- 改行を示す仮文字 Private Const crLfChar = "/" '----- WhisperMessage 'waitTime はミリ秒単位 Public Sub WhisperMessage(msg, Optional waitTime = 1500) With WhisperMessageForm .waitTime = waitTime messageLabel.Caption = connectString(msg) .Show vbModal End With End Sub '----- "/" を改行に変換 Private Function connectString(msg) connectString = Replace(msg, crLfChar, vbCrLf) End Function
こういう風に使います。囁いて、2秒後に消えます。
標準モジュール WhisperMessageDemo()
Sub WhisperMessageDemo() WhisperMessage "WhisperMessage で/囁いています", 2000 End Sub