- ベストアンサー
VBAで多数のプログラムを一つのボタンに集約することは可能でしょうか?
エクセルでVBAを用いてツールを作成しています。 結構な大作になると思ったので、コマンドボタンを多数配置し、それぞれ機能を分けて作成いたしました。 ツールが完成したので、それぞれのボタンを一つのボタンに集約しようと思っています。 しかし、コマンドボタンごとに同じ変数を何回も使用してしまったため、単純にカットペーストでは変数が被ってしまい、うまく動作させることができません。 また、いまから変数をすべて変更するとなると、非常に苦労する作業になってしまいます。 ボタンには順番があり、ボタン1→ボタン2→ボタン3と言うような順番で作動させないと上手く動作しない仕組みにもなっています。 そこで質問なのですが、変数を書き換えることなく、すべてのマクロを一つのボタンにて実行させることはできないでしょうか? 長くなりましたが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういうことでしょうか。。。 ボタンを10個(仮定)作成し、機能ごとに分けて作成したプログラムがあり ボタン1~10まで順番に押していくと、全体作業が終了する作りになっていて、 1つのボタンを押すと1~10までのボタンを順番に押したのと同じ動きにしたい。。。のかな?? だとすると、多分今はUserForm1に Private Sub CommandButton1_Click() : Private Sub CommandButton10_Click() このように関数が並んでいると思われます。 プロジェクトエクスプローラで右クリックし 「挿入」→「標準モジュール」 挿入されたModule1をダブルクリックし、表示されたエディタにUserForm1の プログラムをすべてコピー&ペースト Module1の Private Sub CommandButton1_Click() の private を Public に 関数名称はややこしいので、適当な名前に変更 ここでは CommandButton1_Click を Func1 に変更とする。 で、UserForm1に戻って、コピーした元のプログラムはコメントアウトし Private Sub CommandButton1_Click() call Func1 : Call Func10 End Sub でいかがでしょうか?
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
既回答でも下記内容は、当然出ていると思うが、 各コマンドボタンクリックしたとき実行されるモジュールのコード部分を独立させて、モジュール名をそれぞれつけてモジュールにする。 1つ余分なモジュールを作り(下記Sub Test01()) 実行する順序が決まっているらしいので、その順序にモジュール名を 並べて書けばよいだけの話では。 Sub Test01() Module2 Module1 Module4 ・・・ Sub End ただ変数や引数の点でうまくいくか十分検証が必要。 うまくいかないときこそ、このコーナーの出番。
- onlyrom
- ベストアンサー率59% (228/384)
(1)それぞれのCommandButton_Clickを適当な名前に変える (2)纏め用のCommandButtonを追加してそこから(1)で名前を変更したプロシージャーをCallする CommandButton1~3があり、纏め用に追加したのがCommandButton4だとして CommandButton1_Click → TanToKeisan CommandButton2_Click → SitenKeisan CommandButton3_Click → KaishaKeisan と変更し、CommandButton4のClickイベントで Sub CommandButton_Click() Call TantoKeisan Call SitenKeisan Call KaishaKeisan End Sub このよういするということです。 また、わざわざそんな面倒なことをせずに以下のようにも出来ます。 Private Sub CommandButton4_Click() Call CommandButton1_Click Call CommandButton2_Click Call CommandButton3_Click End Sub が、後々のことを考えるとプロシージャーの名前は 処理の内容が分かるような名前を付けた方がベターでしょう。 以上。
お礼
ソースまで付けて頂き、ありがとうございました。 マクロは無事動作致しました。
お礼
ソースまで付けて頂き、ありがとうございました。 マクロは無事動作致しました。