category name  »  page title date

囁くメッセージ

小さなフォームが開いて、一定時間後に閉じるといった、いわばささやくメッセージです。
長い時間のかかった処理が終了したことを知らせるとか、処理の途中経過を知らせるとか、要するに安心のためにちょっとした情報を表示するだけの、インターラクティヴでないフォームです。「耳打ち」ともいえますね。

左のようなユーザーフォームを用意します。
名前は "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