• ベストアンサー

エクセルマクロ(VBA)での手順

エクセルマクロ(Vba)にて、ご教示をお願い致します。 ユーザーフォーム上にデータをクリアするコマンドボタンを沢山貼り付けております。 一括クリアするボタンを作成したのですが長文になってしまいます。 Private Sub CommandButton101_Click()   Call CommandButton1_Click   Call CommandButton2_Click   Call CommandButton3_Click   Call CommandButton4_Click   Call CommandButton5_Click   Call CommandButton6_Click ↓ ↓ ↓   Call CommandButton50_Click End Sub 以下のような内容に置き換えたいのですが、上手くいきません。 For i = 1 To 50 Me.Controls ("CommandButton1" & i & "_Click") Next 本を片手に、やっておるのですが行き詰ってしまいました。 お知恵を拝借させてください。 よろしくお願いたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

Me.CommandButton1.Value = True を実行すると、Click イベントが発生します。これを利用して Dim i As Long For i = 1 To 3   Me.Controls("CommandButton" & CStr(i)).Value = True Next i とする。

kanican1kg
質問者

お礼

ご回答ありがとうございました。 おかげさまで、バッチシ上手くいきました。 たかがマクロ、されどマクロ奥が深いですね。。。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >For i = 1 To 50 >Me.Controls ("CommandButton" & i & "_Click") >Next Controls の中に入るのは、コントロール名で、プロシージャ名ではありませんから、こういうスタイルはできないと思います。 CommandButtonの中のコードは、ほぼ、内容的に同じではありませんか?もしそうなら、サブルーチンにすればよいと思います。通常、私なら、最初に、Class でインスタンスを設けますが、あえて、今のループのスタイルにしたいのでしたら、 CommandButton の前の、 Private Sub CommandButton1_Click() から、Private を取って、以下のようなコードなら動きます。 そういうスタイルは、あまり上手くないと思いますが、実害はないはずです。 Dim i As Long  For i = 1 To 50   CallByName Me, "CommandButton" & i & "_Click", VbMethod  Next i

kanican1kg
質問者

お礼

ご回答ありがとうございました。 カットアンドペーストでやってみたのですが、エラーになってしましした。 難しいですね。。。

noname#99913
noname#99913
回答No.1

構文としては次のようになるのでは……。うまく動くかはわかりませんが。 Me.Controls ("CommandButton" & i & "_Click") 「"CommandButton1"」ではなく「"CommandButton"」とする。

kanican1kg
質問者

お礼

>>「"CommandButton1"」ではなく「"CommandButton"」とする。 ご回答ありがとうございました。 当該部は私の本サイトへの入力時のミスでした。 「"CommandButton"」になっていたのですが、動きませんでした。

関連するQ&A

専門家に質問してみよう