6

さて、私の問題は、Excel セルの参照と 2 つのテキスト値と Variant をパラメーターとして受け取る VBA Sub を作成したことです。

Sub CreateButton(oCell, sLabel, sOnClickMacro, oParameters)

この Sub は oCell 上にボタンを作成することに成功しましたが、マクロにパラメーターを送信する必要があります。これを実現する最善の方法は何ですか?

機能しないいくつかの方法を掘り下げた場合、また他の方法が汚れていて、私を快適に満たせない場合


与えられた助けを借りて、私は問題を解決することができました。そのためのより簡単な実用的な解決策をここに置いています

Sub Button_Click(sText)
    MsgBox "Message: " & sText
End Sub

Sub Test_Initiallize()
    Dim oCell
    Dim oSheet
    Dim oShape

    Set oCell = Range("A1")
    Set oSheet = ThisWorkbook.Sheets(1)

    For Each oShape In oSheet.Shapes
        oShape.Delete
    Next

    Set oShape = oSheet.Shapes.AddShape(msoShapeRectangle, oCell.Left, oCell.Top,     oCell.Width, oCell.Height)

    oShape.TextFrame.Characters.Text = "Click Me"
    oShape.OnAction = "'Button_Click ""Hello World""'"
End Sub
4

2 に答える 2

11

呼び出すサブルーチンとそれに続く引数を持つ文字列を OnAction に割り当てることができます (文字列全体が一重引用符で囲まれていることに注意してください)。

お気に入り:

Shape.OnAction = "'SubToCallOnAction ""Hello World!""'"

Sub SubToCallOnAction(text As String)

    MsgBox text

End Sub

数値引数には引用符は必要ありません (ただし、数値 -> デフォルトの文字列変換 -> デフォルトの数値変換を介して渡されます)

だから、あなたがしたいことは、クリックされたボタンの名前を渡すことだと思います:

Shape.OnAction = "'SubToCallOnAction """ & Shape.Name & """'"

より高度で柔軟な使用法は次のようになります。

'Set the button up like:
databaseTable = "tbl_ValidAreas"
databaseField = "Country"
Shape.OnAction = _
    "'SubToCallOnAction """ & _
    Shape.Name & """ """ & _
    databaseTable & """ """ & 
    databaseField & """'"

...
Sub SubToCallOnAction(buttonID As String, ParamArray args)

    Select Case buttonID
        Case "button1"
            'get the relevant data or whatever using the ParamArray args
            Call GetData(args(0),args(1))
        ...
    End Select

End Sub
于 2013-08-17T00:28:43.207 に答える