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

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