EXCEL VBAでCallで別のVBAプログラムを呼び出すとき、変数名と内容と次元を維持したままで、呼び出されたプログラムで使用動作させる事は可能なのでしょうか?。

Visual Basic | Excel202閲覧

ベストアンサー

0

Public A As Integer の宣言は、同一のモジュールでないといけないのでしょうか?。 例えば同一ファイル内に、Module1とModule2にプログラムが分れている場合は両方に宣言すれば、変数を共有できますでしょうか? 例えば他のファイルを呼び出して開き、見えない状態の陰で実行する場合等も両方で宣言すれば使えますでしょうか?。

ThanksImg質問者からのお礼コメント

>ただし、この方法は簡単な反面、どこかのモジュールで意図せず変数が書き換えられる危険があるのでご注意ください。 教えて頂いた方法でプロシージャ完成しました。 ありがとうございます

お礼日時:7/14 8:55

その他の回答(2件)

0

可能です。 ほとんど他の回答者様がおっしゃっている通りです。 値渡しのByValやらグローバルのPublic等を使えば 良いかと思います。 例えばモジュール1に _________________ Public i As Integer Public Name As String -------------------------- Sub 値テスト () i = 5 Name = "山田" End Sub -------------------------- Sub 出力 () Debug.Print i Debug.Print Name End sub __________________ という感じに書き、「出力」という方を 実行してみると、イミディエイトウィンドウに ちゃんと、「5」と「山田」が出力されます。 中身が維持されているからです。 もちろん、「出力」という方だけ 別のモジュールに書いて 実行しても、ちゃんと中身は維持されます。 ちなみにPublicによる変数はモジュールの 一番上に書きますが、シートモジュールに Publicは書けませんので注意して下さい。 書いても実行時にエラーになります。 呼び出す方(例でいうと「出力」)を シートモジュールに書くなら大丈夫です。

0

>別のVBAプログラム とは何でしょうか。 ある.xlsmから、別の.xlsmのプロシージャーに配列変数を渡したい。でいいですか。それならこう。あと「ファイル」という曖昧な表現は避けた方がよいです。マクロ付きブック(.xlsm)も.basも.jpgもファイルです。 Sub Book1のプロシージャー() Dim 配列: 配列 = Array("いの", "しか", "ちょう") Application.Run "'Book2.xlsm'!Book2のプロシージャー", 配列 End Sub Sub Book2のプロシージャー(配列()) Dim i As Long For i = LBound(配列) To UBound(配列) Debug.Print "Book2 --- " & i & " " & 配列(i) Next End Sub