ユーザーフォーム上にボタンを散らかしてみる

少し前に、こちらの記事を拝読した。
www.excellovers.com
これは面白い!ということで、私も真似してみた。
(Kouさん、ありがとうございます)。

まず、ユーザーフォームを一つ準備する。大きさは、適当だ。
f:id:Infoment:20181121220359p:plain

取り敢えず、42個のコマンドボタンを配置してみる。場所は、RND関数を用いて適当に散らかしてみた。

ユーザーフォーム
Private Sub UserForm_Initialize()
    Dim i As Long
    Dim myCmdBtn As MSForms.CommandButton

    For i = 1 To 42
        Set myCmdBtn = Me.Controls.Add("Forms.CommandButton.1", _
                                               "CommandButton" & i, True)
        With myCmdBtn
            .Left = Me.Width * Rnd * 0.9
            .Top = Me.Height * Rnd * 0.9
            .Width = 20
            .Height = 20
            .Caption = i
        End With
    Next
End Sub

f:id:Infoment:20181121222856p:plain

次に、これを綺麗に並べてみた。そのままだと一瞬で終わってしまうので、動かすたびに0.1秒の待機時間を挟んでみた。

Private Sub UserForm_Click()
    Dim i As Long
    Dim myControl As Control

    Dim j As Long
    Dim dx As Double
    Dim dy As Double

    For Each myControl In Me.Controls
        With myControl
                dx = (.Left - (10 + 20 * (i Mod 7))) / 3
                dy = (.Top - (10 + 20 * WorksheetFunction.RoundDown(i / 7,
0))) / 3
                For j = 1 To 3
                    .Left = .Left - dx
                    .Top = .Top - dy
                    Application.Wait [now()+"0:00:00.1"]
                Next
                i = i + 1
        End With
    Next
End Sub

実際は、ボタンたちがノロノロと動いて整列するのだが、なぜかその様子が上手く録画できなかった。
f:id:Infoment:20181121222754g:plain

これは、なかなか面白い。
折角作ったツールも、使われなければ意味が無い。使ってもらうには、
「とにかく起動したくなる」
ような視覚効果や音響効果などがあると、良いかもしれない。職場で音は出せないので、最初に少しお遊びがあれば?と思って手を付けた次第。

もう少し、研究してみます。

参考まで。