ユーザーフォームをこさえるテクニックを、一つ紹介しておきたいと思います。
普通は、コマンドボタンは、実行用に一つか二つぐらいしか配置しないだろう。
でも、自分でカレンダーをマクロで作ってみたいと思うような時、どうなるか。
ネットで検索するとコードは紹介されていますが、何だか複雑怪奇な書法です。
なので、最も簡便なコードを書いてみたので、参考にしてもらえればうれしい。
ロジックの基本は、部品をループ文で(動的に)作る手法ですが、実に簡単だ。
一方、コマンドボタンを一個ずつ手作業で作り、隣合わせにするのは困難です。
なので、トライ押してみたいと思う人は、次のコードを参考にしてみて下さい。
それで、部品をループ文で動的に作る手法は、クリックイベントが動きません。
一方、手作業でフォームに作ったボタンをクリックすると、勝手に起動します。
最初の一回目で自動的なプロシージャが作られても、ループ文では音沙汰なし。
なので、クリックしたイベント判定を自分でコードをこさえる必要はあります。
というわけで、判定コードの話は次の機会に譲るとして、今回はフォームまで。
実をいうと、このコードの手法で、モグラ叩きゲームまで作成できそうなことが分かって来て、色々と頭をひねっている自分なのでした。
※参考コード
Private Sub UserForm_Initialize() 'ユーザーフォームボタンの動的な生成
Dim MxNr As Long, i As Long
MxNr = 42 'ラベルを作る個数
For i = 1 To MxNr 'ボタンを動的に作る(Frame1の中に)
Set newButton = UserForm1.Controls.Add("Forms.CommandButton.1", "CMD_Btn" & i)
With newButton 'ラベルの詳細を設定
.Width = 36
.Height = 36
.Left = LftNr(i)
.Top = TpNr(i)
.Font.Size = 16
.Font.Name = "Jokerman" ’変わったフォントを指定しています
.Caption = i
End With
Next
End Sub
Function LftNr(ByVal i As Long) ’関数プロシージャ(値渡し)
Dim j As Long
j = i Mod 7
Select Case j
Case 1
LftNr = 10
Case 2
LftNr = 10 + 36 * 1
Case 3
LftNr = 10 + 36 * 2
Case 4
LftNr = 10 + 36 * 3
Case 5
LftNr = 10 + 36 * 4
Case 6
LftNr = 10 + 36 * 5
Case 0
LftNr = 10 + 36 * 6
End Select
End Function
Function TpNr(ByVal i As Long) ’関数プロシージャ(値渡し)
Select Case i
Case Is <= 7
TpNr = 25
Case Is <= 14
TpNr = 25 + 36 * 1
Case Is <= 21
TpNr = 25 + 36 * 2
Case Is <= 28
TpNr = 25 + 36 * 3
Case Is <= 35
TpNr = 25 + 36 * 4
Case Is <= 42
TpNr = 25 + 36 * 5
End Select
End Function
0 件のコメント:
コメントを投稿