category name  »  page title date

こんなスプラッシュ画面は?

まとまったマクロ・ブックを作った際に、ちょっと洒落たスプラッシュ画面(起動画面)を最初に表示したいな、ということがあります。
何のためのシステムかを表示できるかもしれませんが、それ以外まったく役に立たない仕掛ではあります。いってみれば、お遊びですね。お遊びをしてみました。

お遊びなら、いろいろなことが考えられますが、ここでは、タイトルを横にスライドするような画面を作ってみました。画面全体としては、ブックのファイル名(タイトル)とバージョン(仮に日にちを入れています)、提供した相手の名前を表示しています。このほかに、たとえばアイ・キャッチのための素敵な画像やロゴマークなどがはいっていればよいのでしょうが、サンプルのため割愛。

BootForm

まず、BootForm という名前で、フォームを1枚つくります。ここでは、ProjectTitleLabel、VersionNameLabel、LicensedNameLabel などのラベルを配置していますが、肝心なのはこの ProjectTitleLabel です。あとで、これを動かします。
それぞれ、フォントや文字色、背景色など、適当なプロパティを施して用意しておきます。

このフォームを使って、こんな画面になるようにします。
(余談ながら、この GIF を作るのにはちょっと苦労しました。本来の動きはもっと滑らかです。速度は、わかりやすいように本来よりも少し遅めにしています)

そのために、このフォームのコードとして、次のようなコードを追加します。

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