Excel VBA質問箱 IV

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

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


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

【39713】Call ステートメント tomo 06/6/29(木) 15:14 質問[未読]
【39714】Re:Call ステートメント Jaka 06/6/29(木) 15:28 発言[未読]
【39739】Re:Call ステートメント tomo 06/6/30(金) 9:23 質問[未読]
【39741】Re:Call ステートメント Blue 06/6/30(金) 9:39 回答[未読]
【39745】Re:Call ステートメント tomo 06/6/30(金) 11:02 お礼[未読]
【39746】Re:Call ステートメント Blue 06/6/30(金) 11:14 発言[未読]
【39716】Re:Call ステートメント Blue 06/6/29(木) 15:31 回答[未読]
【39738】Re:Call ステートメント tomo 06/6/30(金) 9:14 お礼[未読]

【39713】Call ステートメント
質問  tomo  - 06/6/29(木) 15:14 -

引用なし
パスワード
   度々お世話になっております。
恐れ入りますが,今回も宜しくお願い致します。

いくつかの CheckBox を on/off することで,
マクロを実行させるコード作成しています。

For i = 1 To 3        '例えば,CheckBox が3つの場合
  If Controls("CheckBox" & i).Value Then
   Call macro1
  End If
Next i

上記の場合,macro1 しか実行されませんが,
CheckBox1 → macro1
CheckBox2 → macro2
CheckBox3 → macro3
のような関係でそれぞれ対応するマクロを実行させたいと思っています。
Call ステートメントをどのようにすれば良いのでしょうか?

【39714】Re:Call ステートメント
発言  Jaka  - 06/6/29(木) 15:28 -

引用なし
パスワード
   ▼tomo さん:
>For i = 1 To 3        '例えば,CheckBox が3つの場合
>  If Controls("CheckBox" & i).Value Then
>   Call macro1
>  End If
>Next i
この書き方だと、Callでなくrunメソッドかな。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=61;id=FAQ

【39716】Re:Call ステートメント
回答  Blue  - 06/6/29(木) 15:31 -

引用なし
パスワード
   ユーザフォームのなかにmacro1〜macro3が記述されていれば、
CallByNameを使うことでマクロ名の文字列から呼び出すことが可能です。

' macro1を呼び出す
Call CallByName(Me, "macro" & 1, VbMethod)

【39738】Re:Call ステートメント
お礼  tomo  - 06/6/30(金) 9:14 -

引用なし
パスワード
   ▼Blue さん:
返信ありがとうございます。

ユーザーフォームにmacro1〜macro3を移動させることで,
上手く出来ました。
他のマクロとの絡みもあり,macro1〜macro3は,
標準モジュール内に置きたいので,runの方で作成することにしました。

今回,教えていただいた知識は,今後に生かしたいと思います。
ありがとうございました。

【39739】Re:Call ステートメント
質問  tomo  - 06/6/30(金) 9:23 -

引用なし
パスワード
   ▼Jaka さん:
Application.run ("macro" & i )
とすることで,上手くいきました。

続けて,教えて下さい。
macro1〜macro3 と連番になるような簡単なネーミングでしたが,
このマクロ名が,
macro1 → AAA
macro2 → BBB
macro3 → CCC
となっていた場合はどうすればよろしいのでしょうか?

例えば,(適当に書いてしまっていますが・・・)
pgm1 = AAA
pgm2 = BBB
pgm3 = CCC
と変数に置き換えるという考えでいいのでしょうか?

お手数ですが,宜しくお願いします。

【39741】Re:Call ステートメント
回答  Blue  - 06/6/30(金) 9:39 -

引用なし
パスワード
   呼ぶ時に Array関数を使うとか。

Application.Run Array("AAA", "BBB", "CCC")(i - 1)

個人的には少しみにくいかなぁと、、
普通は面倒だけど Select Case で分けるべきかなぁ。

Select Case i
Case 1
  Call AAA()
Case 2
  Call BBB()
Case 3
  Call CCC()
End Select

【39745】Re:Call ステートメント
お礼  tomo  - 06/6/30(金) 11:02 -

引用なし
パスワード
   ▼Blue さん:
ありがとうございます。
どちらのケースでも上手く出来ました。

簡易的なコードに直して質問したのですが,
実際に作成中のコードでは変数の引渡しがあることを忘れていたため,
callを使わないと駄目なのか。。と思っていたところ,
Select Case を回答いただき,全て解決いたしました。

改めまして,本当にありがとうございました。

【39746】Re:Call ステートメント
発言  Blue  - 06/6/30(金) 11:14 -

引用なし
パスワード
   ▼tomo さん:
>実際に作成中のコードでは変数の引渡しがあることを忘れていたため,
>callを使わないと駄目なのか。。と思っていたところ,
Application.Runのヘルプを見てもらうとわかると思いますが、
引数も渡せるようになっています。

ただ,関数によって渡すものや数が違うと当然、Application.Runを使って
関数名で呼ぶというのは不可能になります。

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