ボタンコントロールにパラメータ付きの関数を登録する

sheetオブジェクトにボタンコレクションがあって、そいつにAddすることでシートにボタンができることにも驚いたけど、そのボタンがクリックされたときに実行するマクロ(関数てかVBだとサブルーチンか)を登録しないと、ボタンを作った意味がない。 今回は、各行のあるセルにボタンを作り、クリックされたボタンのある行番号を使って処理をしたかった。 Webをあちこち覗いてみると、OnActionプロパティに実行したいマクロを登録(設定)すればいいことがわかった。 さらにパラメータ(引数)も渡せるらしいこともわかった。 しかし例として載っているのは、固定値を渡す方法ばかりで、変数(行数)を渡す術は、なかなか見つからない。 そして、更にググってみるとやっとこんなページを見つけた。 まさしく、ボクがやりたかったことが書いてある。 予め文字列に引数付きの関数を作っておいて、それをセットするなんてなんて賢いんだ。 と云うわけで、このページを参考にしてボクが書いたコードは下記の通り。

■ ボタンを作るコード Private Sub MakeButton(ByVal row As Long) ' ' @brief ボタンを作る ' @note ' @date May 10, 2018 ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim strOnAction As String ' strOnAction = "'Module1.UpdateButtonClick " & Chr(34) & row & Chr(34) & "'" strOnAction = "'UpdateButtonClick(" & row & ")'" ' strOnAction = "'UpdateButtonClick(""" & row & """)'" ' ボタンを作成 With ThisWorkbook.Sheets("MailAddressData").Buttons.Add(Cells(row, 5).Left + 1, _ Cells(row, 5).Top + 1, _ Cells(row, 5).Width - 1, _ Cells(row, 5).Height - 1) .OnAction = strOnAction ' ハンドラ関数(文字列) .Font.Size = 8 ' フォントサイズ .Font.name = "Meiryo" ' フォントファミリ .Characters.Text = "Update" ' キャプション End With End Sub ■ ボタンをクリックしたときに呼ばれるコード 'Private Sub UpdateButtonClick(ByVal ClickRow As String) 'Public Sub UpdateButtonClick(ByVal ClickRow As String) 'Private Sub UpdateButtonClick(ByVal ClickRow As Long) Public Sub UpdateButtonClick(ByVal ClickRow As Long) ' ' @brief ボタンがクリックされた ' @note ' @date May 10, 2018 ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim strMailAddress As String Dim strPageUrl As String Dim objIE As Object ' オープンするURLを作る strMailAddress = ThisWorkbook.Worksheets("MailAddressData").Range("A1").Offset(ClickRow - 1, 0).Value strMailAddress = Replace(strMailAddress, "@", "%40") strPageUrl = PAGE_URL & strMailAddress ----- 以下企業秘密のため省略 ----- 注)PAGE_URL はConstで定義している文字列
お蔭さまで上手くいった。 そうそう、呼ばれる側、Publicにしないとうまく行かない。てか、標準モジュールに書いてるのがいけないのかもしれない。 シート側に書いて、シート名で修飾してやれば上手くいくのかも...。
--
のち

No comments: