Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7777 / 13644 ツリー ←次へ | 前へ→

【36505】フォームボタンなどでのマクロ呼出しでのSUBへの引数 momo 06/4/2(日) 11:40 質問[未読]
【36513】Re:フォームボタンなどでのマクロ呼出しで... Kein 06/4/2(日) 12:46 回答[未読]
【36923】Re:フォームボタンなどでのマクロ呼出しで... momo 06/4/18(火) 12:49 お礼[未読]
【36929】Re:フォームボタンなどでのマクロ呼出しで... Jaka 06/4/18(火) 14:08 発言[未読]
【36933】消し忘れた。 Jaka 06/4/18(火) 14:50 発言[未読]

【36505】フォームボタンなどでのマクロ呼出しでの...
質問  momo  - 06/4/2(日) 11:40 -

引用なし
パスワード
   いつもお世話になっております。
以前にも、ADOでのアプリ作成の際には大変お世話になり、本当に感謝いたしております。

ところで、あいも変わらず初歩的な質問で恐縮ですが、、、

フォームボタンなどで、マクロを呼び出すことにした際、
Subに対して、引数を渡すことはできるのでしょうか?
具体的には、画面上にいくつかボタンを配置し、
そのボタンによって、データを呼出し編集するという処理をすることを考えていますが、
ボタンによって呼出対象となる値が異なるだけで、処理自体は重複するものです。
35ほどのボタンを用意したいのですが、わざわざそれだけの数のSUBを次のように設けるのも、もったいないというか、、

Sub ボタン1
a = 処理(1)
End Sub

Sub ボタン2
a = 処理(2)
End Sub





つぎのようなSubを作って、引数を渡すがだけにしたいのですが。。。
(キーボードからの入力なしで処理をさせたいのです)

Sub ボタン1〜35(hikisuu)
a = 処理(hikisuu)
End Sub

どなたかご教示くださませm(_ _)m

【36513】Re:フォームボタンなどでのマクロ呼出し...
回答  Kein  - 06/4/2(日) 12:46 -

引用なし
パスワード
   フォームツールバーのオブジェクトを利用するなら、登録したマクロを呼び出したとき
Callerプロパティに「そのマクロを登録しているオブジェクトの名前(Name)」を取得
することが出来ます。オブジェクトの名前は、数式バーを開いてオブジェクトを選択
すると、バーの左端の窓に出てきます。(既に何らかのマクロが登録されているなら、
[Ctrl]キーを押しながらマウスで選択します。)まずボタンを一つずつ押して、名前を
メモしておきます。次に・・

Sub Set_Action()
  ActiveSheet.Buttons.OnAction = "MyAction"
End Sub

Sub MyAction()
  Dim x As Variant

  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  MsgBox x & " がクリックされました", 64
End Sub

を標準モジュールに入れ、Set_Action を一回だけ実行してから、任意のボタンを
押してみて下さい。押したボタンによって異なった名前がメッセージされることを
確認し、先ほど採ったメモを見ながら MyAction のコードを

Sub MyAction()
  Dim x As Variant

  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  Select Case x
   Case "ボタン 11"
     'ボタン 11が押されたときの処理
   Case "ボタン13"
     'ボタン 13が押されたときの処理
   Case ・・・
 
  End Select
End Sub

というように変更すれば、一つのマクロで複数のボタンに対応する複数の処理が
出来るようになります。
なお「ツール」「マクロ」・・で、リストから MyAction を選んで実行した場合、
Callerプロパティの値のデータ型は文字列になりません。それで"ボタンを押して
実行されたのではない"ということが分かるので、冒頭でVarType関数を使って
データ型を調べているわけです。

【36923】Re:フォームボタンなどでのマクロ呼出し...
お礼  momo  - 06/4/18(火) 12:49 -

引用なし
パスワード
   Kein さん、ありがとうございました!
おかげで、ばっちり解決しそうです!

4月当初で異動直後だというのにパソコンはクラッシュするわ、他の仕事がいそがしいわで、すごく返事が遅れてしまいました。本当にすみません。
ありがとうございましたm(_ _)m

【36929】Re:フォームボタンなどでのマクロ呼出し...
発言  Jaka  - 06/4/18(火) 14:08 -

引用なし
パスワード
   違う方法だけど..。

クラスモジュール(名前は、Class1)

Public WithEvents ButtonClickEvent As MSForms.CommandButton
Private Sub ButtonClickEvent_Click()
  With ButtonClickEvent
     引数 = UserForm1.ActiveControl.Caption
     Application.Run "ボタン135", 引数
  End With
End Sub


フォームモジュール

Dim FMCls() As New Class1
Private Sub UserForm_Initialize()
  Dim FMCNT As Long
  FMCNT = 0
  For Each Form_C In Me.Controls
    If TypeName(Form_C) = "CommandButton" Then
      FMCNT = FMCNT + 1
      ReDim Preserve FMCls(1 To FMCNT)
      Set FMCls(FMCNT).ButtonClickEvent = Me.Controls(Form_C.Name)
    End If
  Next
End Sub


標準モジュール

Sub ボタン135(hikisuu)
 MsgBox hikisuu
End Sub

【36933】消し忘れた。
発言  Jaka  - 06/4/18(火) 14:50 -

引用なし
パスワード
   >Private Sub ButtonClickEvent_Click()
>  With ButtonClickEvent
>     引数 = UserForm1.ActiveControl.Caption
>     Application.Run "ボタン135", 引数
>  End With
>End Sub
     ↓
Private Sub ButtonClickEvent_Click()
  引数 = UserForm1.ActiveControl.Caption
  Application.Run "ボタン135", 引数
End Sub

7777 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free