• 締切済み

パブリック変数を宣言する時に・・・

エクセルVBAの質問です。 モジュールAとBがあるとしまして、 Aの中にあるプロシージャからBの中のプロシージャを呼び出す場合、 変数を引き渡したいとしたらパブリック変数を使いますよね? この場合宣言は、 Aの宣言セクションでするのか、 Bの宣言セクションでするのか、 あるいは両方で同じ変数を宣言するのか、 どれなんでしょ?

みんなの回答

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

こんにちは。 > Aの宣言セクションでするのか、Bの宣言セクションでするのか、 > あるいは両方で同じ変数を宣言するのか、 試せばすぐわかることですが、どのモジュールでもいいですよ。 例) ' // --- Module1 --- Public a As Long Sub Main()   a = 10   Call SubProc() End Sub ' // --- Module2 --- Sub SubProc()   MsgBox Cstr(a) End Sub > 変数を引き渡したいとしたらパブリック変数を使いますよね? 現在主流となっているコーディングルールでは、なるべく広域変数 つまりグローバル変数を使わないことが推奨されています。 私なら引数を使います。パブリック変数はほとんど使いません。 例) ' // --- Module1 --- Sub Main()   Dim a As Long   a = 10   Call SubProc(a) End Sub ' // --- Module2 --- Sub SubProc(ByVal b As Long)   MsgBox CStr(b) End Sub ちなみに、ThisWorkbook、シートモジュール等で宣言した Public な変数 にアクセスするには、   Sheet1.hoge   ThisWorkbook.hoge のように書きます。また、Dim キーワードで宣言した場合は、モジュール レベル変数(Private)として扱われますので、ほかモジュールからは アクセスできません。

noname#91725
質問者

お礼

ご回答ありがとうございます。 知識として、どのモジュールに書いても良いと理解しているのですが、 何故か上手く動かなくて、見落としてることがあるのかと思って質問しました。 自分は頭が良くないので、引数という概念が全く理解出来ません。 どうしたら例に出されているようなプロシージャになるのか、 本当にわからないのです。ごめんなさい。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

#2です。 ちょっとだけ変えます。 同じシートモジュールに書く場合は、かんたんです。 たとえば、Sub aaa と Sub bbb を Module1にかく場合です。 Sub aaa と Sub bbb で「行あ」を受け渡します。 最初の Sub の前に、受け渡したい変数「行あ 」を書きます。 Option Explicit Dim 行あ As Long Sub aaa() Dim myCmd As Integer 行あ = 10 Call Sub bbb If 行あ = 22 Then ' 処理 End If End Sub Sub bbb() Dim myCmd As Integer If 行あ = 10 Then ' 処理 行あ = 22 End If End bbb このようにすれば、モジュール間の値の受け渡しができます。 注 違うシートモジュール間の受け渡しは、できません。

noname#91725
質問者

お礼

ご回答ありがとうございます。 同一モジュール内に於いては、宣言セクションに書けば、 パブリックにしなくても良い、と解釈しているのですが。 記述は標準モジュール内にしています。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.2

同じシートモジュールに書く場合は、かんたんです。 たとえば、Sub aaa と Sub bbb を Module1にかく場合です。 Option Explicit Dim 行あ As Long Sub aaa() Dim myCmd As Integer 行あ =10 Call Sub bbb End Sub Sub bbb() Dim myCmd As Integer If 行あ =10 Then ' 処理 End If End bbb このようにすれば、モジュール間の値の受け渡しができます。 注 違うシートモジュール間の受け渡しは、できません。

回答No.1

VBAは詳しくないですが 参考URLの Visual Basic for Applications の変数の適用範囲 -パブリック変数の適用範囲 に この変数はどのモジュール シートでも宣言できます。 と書かれています。参考にしてみてください

参考URL:
http://support.microsoft.com/kb/141693/ja
noname#91725
質問者

お礼

ご回答ありがとうございます。 どのモジュールでも良い、というのはわかっているのですが、 どのモジュールでは良くない、というのがわからないんですよねえ・・。

関連するQ&A