アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも勉強させていただいております。
現在、ユーザーフォームで入力画面を作成しています。
質問なのですが、コマンドボタンを押したときに
その名前を取得したいのですが、そのボタンがFrameや
マルチページの中にあると以下の記述では、フレームや
ページの名前を返してしまうのですが、どのようにコードを
記述すればよろしいでしょうか?

Private Sub CommandButton13_Click()
MsgBox Me.ActiveControl.Name
End Sub
フレームやマルチページの中にあっても、
「CommandButton13」の名前を返す書き方
があればご指導のほどお願いいたします。
宜しくお願いいたします。

A 回答 (2件)

こんにちは。



コントロールの種類で場合わけし、ActiveControl の結果がコンテナ
であれば、さらにその中の ActiveControl を探せば良いかと。

Private Sub CommandButton13_Click()
  MsgBox ActiveControlEx.Name
End Sub

Private Function ActiveControlEx() As Control
  Dim ac As Control
  Set ac = ActiveControl
  Do
    Select Case UCase$(TypeName(ac))
      Case "FRAME"
         Set ac = ac.ActiveControl
      Case "MULTIPAGE"
         Set ac = ac.Pages(ac.Value).ActiveControl
      Case Else
         Set ActiveControlEx = ac
         Exit Do
    End Select
  Loop
End Function
    • good
    • 0

コマンドボタン名だけの表示をクラスモジュールを使ってやってみます。

まず以下をユーザーフォームモジュールシートに貼り付けます

Dim myCb() As Class1
Private Sub UserForm_Initialize()
Dim cnt, i As Integer
Dim ctrl As Control
  ReDim myCb(1 To UserForm1.Controls.Count)
  For Each ctrl In UserForm1.Controls
    If TypeName(ctrl) = "CommandButton" Then
      cnt = cnt + 1
      Set myCb(cnt) = New Class1
      Set myCb(cnt).opt = ctrl
    End If
  Next
End Sub

またこれ以下は左上のVBA Projectでシート名を右クリックし「挿入」→「クラスモジュール」で表示される画面に貼り付けて下さい(Class1という名前は変更しないこと!)

Public WithEvents myCb As MSForms.CommandButton
Public Property Set opt(setcb As MSForms.CommandButton)
 Set myCb = setcb
End Property
Public Property Get opt() As MSForms.CommandButton
End Property
Sub myCb_Click()
' コマンドボタンクリック時の動作を記述するところ
 MsgBox myCb.Name & " がクリックされました" & Chr(13) & _
    "ActiveControlは" & UserForm1.ActiveControl.Name & "です"
End Sub

Userform1を表示させてコマンドボタンをクリックすると、そのオブジェクト名が表示されます。ActiveControl名も表示させていますから違いが分かると思います
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!