プロが教えるわが家の防犯対策術!

エクセルでVBAを用いてツールを作成しています。
結構な大作になると思ったので、コマンドボタンを多数配置し、それぞれ機能を分けて作成いたしました。
ツールが完成したので、それぞれのボタンを一つのボタンに集約しようと思っています。
しかし、コマンドボタンごとに同じ変数を何回も使用してしまったため、単純にカットペーストでは変数が被ってしまい、うまく動作させることができません。
また、いまから変数をすべて変更するとなると、非常に苦労する作業になってしまいます。
ボタンには順番があり、ボタン1→ボタン2→ボタン3と言うような順番で作動させないと上手く動作しない仕組みにもなっています。

そこで質問なのですが、変数を書き換えることなく、すべてのマクロを一つのボタンにて実行させることはできないでしょうか?
長くなりましたが、よろしくお願いいたします。

A 回答 (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

でいかがでしょうか?
    • good
    • 0
この回答へのお礼

ソースまで付けて頂き、ありがとうございました。
マクロは無事動作致しました。

お礼日時:2008/04/23 05:04

既回答でも下記内容は、当然出ていると思うが、


各コマンドボタンクリックしたとき実行されるモジュールのコード部分を独立させて、モジュール名をそれぞれつけてモジュールにする。
1つ余分なモジュールを作り(下記Sub Test01())
実行する順序が決まっているらしいので、その順序にモジュール名を
並べて書けばよいだけの話では。
Sub Test01()
Module2
Module1
Module4
・・・
Sub End
ただ変数や引数の点でうまくいくか十分検証が必要。
うまくいかないときこそ、このコーナーの出番。
    • good
    • 0

 


(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

が、後々のことを考えるとプロシージャーの名前は
処理の内容が分かるような名前を付けた方がベターでしょう。

以上。
 
    • good
    • 0
この回答へのお礼

ソースまで付けて頂き、ありがとうございました。
マクロは無事動作致しました。

お礼日時:2008/04/23 05:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています