• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数を保持して呼び出す方法)

変数の保持と呼び出し方法

このQ&Aのポイント
  • 変数を保持して呼び出す方法や変数が受け継がれない場合の対処法について教えてください。
  • Sub AとSub Bという複数のプロシージャをModule1に配置し、Sub Aで指定したファイルをSub Bで呼び出そうとしていますが、変数が受け継がれません。変数を保持する方法はありますか?
  • シートのセルに変数を保持して呼び出す方法以外に、変数を保持する方法はありますか?

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.14

利用した各プロシージャの最後に Set C_Ws = Nothing は入れておいてください。 入れておかないと、一度実行して正常にプロシージャから抜けた後でシート名(コードではなく実際のシート名)を変更した場合、そのまま次のプロシージャを実行するとSetとシート名が違うのにエラーになりません。 Setでシート名ではなくシートのオブジェクト名がSetされるためだと思われます。 シート名で探してオブジェクト名でSetする感じ。 なので Set C_Ws = Nothing で開放しておくと、その後の実行時に新しくSetするのでシート名が違う場合ちゃんとエラーになります。

すると、全ての回答が全文表示されます。

その他の回答 (13)

  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.3

> 多分、Sub A()が終了した時点で一度マクロが終了して > 新たにSub B()を呼び出すので上手く変数が受け継がれないのだと思いますが If rc = vbNo Thenで中止とvbYesの終了どちらで終了しても変数の値は保持しています。 '(途中のコード省略)のところでT_Fileを""にしているところが無いでしょうか。 中止とvbYesの終了のところでMsgBoxでT_Fileの値を確認してみてください。 宣言も同じモジュールの中だという事みたいですので (Sub A()に宣言が無いのでそのままだとT_Fileの定義が無いというエラーになりますよね) Dim T_File As String で大丈夫だと思いますが、一度 Public T_File As String で試してもいいかもしれません。 あと、かなり以前にグローバル変数は何かのタイミングで飛ぶことがあるというのを聞いたことがあります。ただ、かなり前なので今はそういう事は無いのかもしれませんが、もしかしたら程度で片隅に置いておいてもいいかもしれません。

すると、全ての回答が全文表示されます。
  • asciiz
  • ベストアンサー率70% (6871/9771)
回答No.2

ええと、一つのモジュール内で宣言し、そのモジュール内でしか使えない変数を「プライベート変数」と言います。 そしてモジュール外で宣言し、どのモジュールからでも使えるような変数は「グローバル変数」と言います。 Excel VBA で、グローバル変数を作成するには、「Public」を付けて宣言します。 ということでまあNo.1さんと同じ回答にはなってしまうのですが。 次のページなども読んでみてください。 >Office TANAKA - 変数の使い方[変数の適用範囲] >http://officetanaka.net/excel/vba/variable/05.htm

NuboChan
質問者

補足

>Dim T_File As String を >Public T_File As Stringにすればいいのでは。 sub A()が始まる前に DIMで配列宣言をすれば、Public と書かなくても それは、Publicとして扱われると思っていたのですが 私の認識が間違っているいるのでしょうか? Option Explicit Dim dlg As FileDialog Dim T_File As String Sub A()

すると、全ての回答が全文表示されます。
  • sknbsknb2
  • ベストアンサー率38% (1158/3037)
回答No.1

Dim T_File As String を Public T_File As Stringにすればいいのでは。

NuboChan
質問者

補足

>Dim T_File As String を >Public T_File As Stringにすればいいのでは。 sub A()が始まる前に DIMで配列宣言をすれば、Public と書かなくても それは、Publicとして扱われると思っていたのですが 私の認識が間違っているいるのでしょうか? Option Explicit Dim dlg As FileDialog Dim T_File As String Sub A()

すると、全ての回答が全文表示されます。

関連するQ&A