インターネット上で、私がやりたいことをほぼ実行できる多くのリソースを見つけましたが、完全ではありません。名前付き範囲「デイリスト」があります。dayList の各日について、その日のマクロを実行するボタンをユーザー フォームに作成したいと考えています。ボタンを動的に追加することはできますが、daycell.text を名前付き範囲からボタン、イベント ハンドラー、マクロに渡す方法がわかりません:S ユーザー フォームを作成する必要があるコードは次のとおりです。
Sub addLabel()
ReadingsLauncher.Show vbModeless
Dim theLabel As Object
Dim labelCounter As Long
Dim daycell As Range
Dim btn As CommandButton
Dim btnCaption As String
For Each daycell In Range("daylist")
btnCaption = daycell.Text
Set theLabel = ReadingsLauncher.Controls.Add("Forms.Label.1", btnCaption, True)
With theLabel
.Caption = btnCaption
.Left = 10
.Width = 50
.Top = 20 * labelCounter
End With
Set btn = ReadingsLauncher.Controls.Add("Forms.CommandButton.1", "runButton", True)
With btn
.Caption = "Run Macro for " & btnCaption
.Left = 80
.Width = 80
.Top = 20 * labelCounter
' .OnAction = "btnPressed"
End With
labelCounter = labelCounter + 1
Next daycell
End Sub
上記の問題を回避するために、現在、実行したい日 (Day1 など) を入力するようにユーザーに促し、これをマクロに渡すと機能します。
Sub B45runJoinTransactionAndFMMS()
loadDayNumber = InputBox("Please type the day you would like to load:", Title:="Enter Day", Default:="Day1")
Call JoinTransactionAndFMMS(loadDayNumber)
End Sub
Sub JoinTransactionAndFMMS(loadDayNumber As String)
xDayNumber = loadDayNumber
Sheets(xDayNumber).Activate
-Do stuff
End Sub
そのため、runButtons ごとに、daycell.text を表示し、同じテキストをパラメータとして使用するマクロを実行して、作業を行うワークシートを選択する必要があります。
どんな助けでも素晴らしいでしょう。マクロを処理するために vba コードを動的に記述する応答を見たことがありますが、パラメーターを渡すことでもう少しエレガントに実行できる方法があるに違いないと思います。よろしくお願いします!