ユーザーフォームをこさえるテクニックを、一つ紹介しておきたいと思います。
普通は、コマンドボタンは、実行用に一つか二つぐらいしか配置しないだろう。
でも、自分でカレンダーをマクロで作ってみたいと思うような時、どうなるか。
ネットで検索するとコードは紹介されていますが、何だか複雑怪奇な書法です。
なので、最も簡便なコードを書いてみたので、参考にしてもらえればうれしい。
ロジックの基本は、部品をループ文で(動的に)作る手法ですが、実に簡単だ。
一方、コマンドボタンを一個ずつ手作業で作り、隣合わせにするのは困難です。
なので、トライ押してみたいと思う人は、次のコードを参考にしてみて下さい。
それで、部品をループ文で動的に作る手法は、クリックイベントが動きません。
一方、手作業でフォームに作ったボタンをクリックすると、勝手に起動します。
最初の一回目で自動的なプロシージャが作られても、ループ文では音沙汰なし。
なので、クリックしたイベント判定を自分でコードをこさえる必要はあります。
というわけで、判定コードの話は次の機会に譲るとして、今回はフォームまで。
実をいうと、このコードの手法で、モグラ叩きゲームまで作成できそうなことが分かって来て、色々と頭をひねっている自分なのでした。
※参考コード
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 件のコメント:
コメントを投稿