まとまったマクロ・ブックを作った際に、ちょっと洒落たスプラッシュ画面(起動画面)を最初に表示したいな、ということがあります。
何のためのシステムかを表示できるかもしれませんが、それ以外まったく役に立たない仕掛ではあります。いってみれば、お遊びですね。お遊びをしてみました。
お遊びなら、いろいろなことが考えられますが、ここでは、タイトルを横にスライドするような画面を作ってみました。画面全体としては、ブックのファイル名(タイトル)とバージョン(仮に日にちを入れています)、提供した相手の名前を表示しています。このほかに、たとえばアイ・キャッチのための素敵な画像やロゴマークなどがはいっていればよいのでしょうが、サンプルのため割愛。
BootForm
そのために、このフォームのコードとして、次のようなコードを追加します。
BootForm
Private Const waitSec = 3 '動きが終了してから3秒間そのまま待機
Private Const stepMiliSec = 10 '動きのステップ時間 (mSec)
Private Const durMiliSec = 1000 '片道にかかる時間 (mSec)
Private Const overRun = -100 '左にオーバーランする幅 (px)
'----- このフォームが表示されたら
Private Sub UserForm_Activate()
'所定の動きをして
slideTitle
'終わったら waitSec だけ待って
Application.Wait [now()] + waitSec / 86400
'このフォームを閉じる
Unload Me
End Sub
'----- 所定の動き
Private Sub slideTitle()
Dim leftMargin, slideStep
leftMargin = Me.width
slideStep = leftMargin * stepMiliSec / durMiliSec * 2
'まず、overRun だけはみ出すまで左に動かす
Do While leftMargin > overRun
runTitle leftMargin, -slideStep
Loop
'正常な位置まで右に戻す
Do While leftMargin < 0
runTitle leftMargin, slideStep
Loop
End Sub
'----- ProjectTitleLabel を stride だけ横に動かす
Private Sub runTitle(ByRef leftMargin, stride)
ProjectTitleLabel.Left = leftMargin
DoEvents
leftMargin = leftMargin + stride
Application.Wait [now()] + stepMiliSec / 86400000
End Sub
あとは、このブックが開いたタイミングでこのフォームを表示するイベント実行ルーチンを、ThisWorkbook に書いておけばよいだけです。
ThisWorkbook
Private Sub Workbook_Open()
With BootForm
.LicensedNameLabel.Caption = "織田上総介平信長"
.ProjectTitleLabel.Caption = ThisWorkbook.Name
.VersionNameLabel.Caption = "2024/06/12"
.Show vbModal
End With
End Sub