2017-02-09 9 views
2

私は、動的ボタンのいずれかがクリックされたときに呼び出される関数で、動的に作成されるボタンのIDを取得しようとしています。関数上のダイナミックボタンのIDを取得する方法は?

プログラムはかなりシンプルですが、アイスクリーム店のチェックアウトであり、ボタンはシート上の製品のリストから値を取得します。必要なのは、ボタンの名前を取得してインデックスは、私は現在、私はこのポストから変更ユーザーフォームを、使用しています

(価格等)製品のプロパティを読み取ることができるように、配置されるが、基本的に同じことをされています

Assign code to a button created dynamically

私はまた、シート上の動的なボタンで試してみましたが、関数を実行することができませんでした、それはr国連以下:

Set btn = Sheet1.Buttons.Add(t.Left, t.Top, t.Width, t.Height) 
With btn 
    .OnAction = "Button_Click" 
    .Caption = Product(idx) 
    .Name = Product(idx) & " " & i 
End With 

そして、私はむしろ、ユーザーフォームを使用したいが、私は、これはすべてのヘルプははるかに高く評価されるだろう

Application.Caller 

「Button_Click」サブ内で動作することをかなり確信しています、それはよりよく見えるから

PS。私は、この問題を解決するためにボタンを隠す/表示したくない場合は、読み込めるアイテムの数に潜在的な限界があり、すべてのアイテムが永久に固定されるようになります。

答えて

0

Classモジュール「cCheckBox」CheckBoxとし、以下のコードを使用してください。

cCheckBoxクラスモジュールのコード

Option Explicit 

Public WithEvents CheckBoxEvents As MSForms.CheckBox 

Private Sub CheckBoxEvents_click() 

    Dim CbIndex As Long 

    CbIndex = CInt(Mid(CheckBoxEvents.Name, 3)) ' get the CheckBox Index pressed 
    MsgBox "CheckBox Index selected is " & CbIndex ' display in a msgbox 

End Sub 

動的(UserForm_Initializeイベントで)User_FormCheckBox ESを追加するためのコードは次のとおりです。

Option Explicit 

' ===== Variables and Objects decleration section ===== 
Dim TchkBox       As MSForms.CheckBox 
Dim CheckBoxArray()     As New cCheckBox 


Private Sub UserForm_Initialize() 

Dim i As Long 

For i = 1 To 5 ' create 5 dynamic Check Boxes in User_Form 
    Set TchkBox = Me.Controls.Add("Forms.CheckBox.1", "Cb" & i, True) ' create a checkbox in user_form 

    With TchkBox ' modify checkbox size and placement 
     .Width = 180 
     .Height = 18 
     .Left = 40 
     .Top = 54 + 24 * i 

     ReDim Preserve CheckBoxArray(0 To i) ' add another CheckBox to array 
     Set CheckBoxArray(i).CheckBoxEvents = TchkBox 
    End With 
Next i 

End Sub 
+0

おかげで多く、完全に働きました! –

関連する問題