Excel VBA質問箱 IV

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

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


5605 / 13645 ツリー ←次へ | 前へ→

【49892】複数のボタンに同じコードを…… shutlmharze 07/6/27(水) 12:11 質問[未読]
【49895】Re:複数のボタンに同じコードを…… neptune 07/6/27(水) 13:18 回答[未読]
【49908】Re:複数のボタンに同じコードを…… bykin 07/6/27(水) 20:35 発言[未読]

【49892】複数のボタンに同じコードを……
質問  shutlmharze  - 07/6/27(水) 12:11 -

引用なし
パスワード
    ユーザーフォームの複数ボタンに同じコードを持たせたいのですが、一括して設定する方法はないでしょうか?5つの「閉じる」ボタンを、例えば、
 Private sub CommandButton1,2,3,4,5_click
  Unload Me
 End sub
のように纏めてしまいたいのです。何か方法はあるでしょうか。

【49895】Re:複数のボタンに同じコードを……
回答  neptune  - 07/6/27(水) 13:18 -

引用なし
パスワード
   ▼shutlmharze さん:
こんにちは

>のように纏めてしまいたいのです。何か方法はあるでしょうか。

もっとうまいやり方があるとは思いますが、こんなのでもいけます。
面倒くさいですよ。

もし判らなければ、同じプロシージャを呼び出すコードを全部の
イベントプロシージャに書きましょう。その方がはるかに早いと思います。

'//////////////////UserForm//////UserForm1//////////////
'//UserFormに2つだけCommandButtonを貼り付けているだけ////////
Option Explicit

Private clsButton(2) As Class1

Private Sub UserForm_Initialize()
  Set clsButton(0) = New Class1
  Set clsButton(0).SetButton = Me.CommandButton1
  Set clsButton(1) = New Class1
  Set clsButton(1).SetButton = Me.CommandButton2
End Sub

Private Sub UserForm_Terminate()
  Set clsButton(0) = Nothing
  Set clsButton(1) = Nothing
End Sub


'////////Classモジュール///// Class1 ////////
Option Explicit

Private WithEvents mButton As MSForms.CommandButton

Public Property Set SetButton(pButton As MSForms.CommandButton)
  Set mButton = pButton
End Property

Private Sub Class_Terminate()
  If Not mButton Is Nothing Then
    Set mButton = Nothing
  End If
End Sub

Private Sub mButton_Click()
  Unload UserForm1
End Sub

研究してくださいませ。この手法はClass(クラス)を使用しています。

【49908】Re:複数のボタンに同じコードを……
発言  bykin  - 07/6/27(水) 20:35 -

引用なし
パスワード
   こんばんわ。

ボタンの数が何十個もあるんなら、neptune はんご紹介の「疑似コントロール配列」
でもええとは思うけど、個数が知れてるんやったら、

>もし判らなければ、同じプロシージャを呼び出すコードを全部の
>イベントプロシージャに書きましょう。その方がはるかに早いと思います。

↑こっちに賛成。
つまり・・・

Private Sub CommandButton1_Click()
  Test Me.ActiveControl
End Sub

Private Sub CommandButton2_Click()
  Test Me.ActiveControl
End Sub

Private Sub CommandButton3_Click()
  Test Me.ActiveControl
End Sub

Private Sub Test(ByRef obj As MsForms.Control)
  MsgBox obj.Caption & "が押されました。"
End Sub

なんて感じ。

・・・で、連番のイベントプロシージャを簡単に量産する裏技(^^;;

1.CommandButton1_Click()のプロシージャを作成し、全文をドラッグ反転させてコピーする。

2.エクセルのワークシートにそのまま貼り付ける。(上記例なら3行にわたって貼りつく)

3.貼り付けたセル範囲が選択されてるので、右下部分にマウスポインタを合わせて下にドラッグ。
 (上記例で6行分ドラッグすれば、CommandButton2_Click()とCommandButton3_Click()ができる)

4.作成したコードをコピーして、モジュールに貼り付ける。

せっかくエクセル使ってるんやから、有効に利用しようってことで・・・(笑)

試してみてな。
ほな。

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