• ベストアンサー

グローバル関数指定のマクロで

 Win2000+Excel2000ですが、本を見ながらマクロを組みましたが、うまく動かないので、色々と教えてもらいながら修正し、グローバル関数を使ってみました。それで、動くようになったのですが、マクロの起動を他のマクロから順に行おうとすると、グローバル関数を使っているマクロだけが動きません。  ALT+F8でマクロを起動して動かすと動くので、マクロ自体には問題ないように思うのですが、対処法はありませんか?ちなみに、順に動かしているマクロは、それぞれのワークシートについています。

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> グローバル変数でした。 了解です。こちらの解説もヘルプに無かったような…(^^; SheetMain Sheet1 Sheet2 のシートを作成し、 -----SheetMain----- Sub TestMain() Call Sheet1.Test1 Call Sheet2.Test2 End Sub -----Sheet1----- Function Test1() MsgBox "Sheet1.Test1(), iTest=" & iTest iTest = iTest + 1 End Function -----Sheet2----- Dim iTest as Integer Function Test2() MsgBox "Sheet2.Test2(), iTest=" & iTest iTest = iTest + 1 End Function を作成、TestMainを実行しましたが、特に問題ありませんでした。 グローバル変数そのものの問題ではないような気がしますが。 -- > 動かないというのは、何も動作しないという意味です。起動もしません。 ということですと、問題の関数をCallしている処理の行で[F9]を押してブレークポイント「●」を設定してください。 その状態で処理を実行すると、該当個所の行を実行する直前の状態で一時停止します。 その後、[デバッグ]-[ステップイン]([F8]キー)を押すと対象の処理に入るハズですが、きちんと行いたい処理になりますでしょうか? 上の例ですと、 SheetMainにTest1()というモジュールがあり、Call Test1のような書き方になっているのなら、Sheet1のTest1は呼び出されません。

dogs59
質問者

お礼

 確認が遅くなってしまってすみません。  グローバル変数そのものがうまく伝わっていないような気もしますが、教えていただいた方法ではうまくいきません。  ちなみにグローバル変数って、 Dim abc As Integer ←これです Sub macro1 ()   abc = MsgBox(DEF)   Range("E1").Value = abc End Sub Sub macro2 ()   abc = MsgBox(XYZ)   Range("E1").Value = abc End Sub  こんな感じで、プロシージャ内ではなく、モジュールの先頭に宣言して、モジュール内の全てのプロシージャに共通の変数とするものなのですが。

その他の回答 (1)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> グローバル関数 少なくとも、ヘルプには出てきません。 どういったものでしょう? > 動きません。 エラーが出るということでしょうか?その場合はどのような? -- 今のブックはバックアップしておいて、各処理の余計な部分を削除した最小限のVBAコードを提示してみてはいかがでしょう? 質問者さんの環境だけの問題かも知れませんし、具体的なコードがある方が問題の把握が正確に出来ます。

dogs59
質問者

お礼

 すみません。グローバル変数でした。  わかったようなわからないようなことですが、普通、プロシージャ内に変数の指定をしますが、モジュール内に変数の指定をして、モジュール内の全てのプロシージャに対して共通の変数とするそうです。  もう1つ、動かないというのは、何も動作しないという意味です。起動もしません。 ちなみに、このグローバル変数を外してしまうと変数の指定がなされていないため、エラーメッセージが出て使い物になりません。それを回避するために、グローバル変数の指定にしました。  よろしくお願いします。

関連するQ&A