アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBA 別Bookへの値渡したいです。(変数に定義したもの)
Module1とModule2がある状態で、
Module1の標準モジュール内に変数date1があるとして
date1の値をModule2へ渡す方法を教えてください。

例は以下です、

Public date As Object ←こちらを別のモジュールでも使用したい(値は入ったまま)
【Module1】
Sub testA()
'連想配列の定義
Set date1= CreateObject("Scripting.Dictionary")
End Sub

【Module2】
Sub testB()
MsgBox date1(0) ←ここで使用したい
End Sub

dateには以下の配列が入っています、
date(0) = A
date(1) = B
date(2) = C

質問者からの補足コメント

  • うーん・・・

    Excel VBA 別Bookへの値渡したいです。といいますか、
    別のModuleに値を渡したいです、

      補足日時:2023/06/06 09:13

A 回答 (4件)

こんにちは


他のブックへの値渡しは
Application.Runを使いますが、渡し先のプロシージャが実行されてしまいます
’ご質問参考例
Option Explicit
Public date1 As Object
Sub testA()
'連想配列の定義
Set date1 = CreateObject("Scripting.Dictionary")
date1(0) = "A"
date1(1) = "B"
date1(2) = "C"
Application.Run "'ブック名.xlsm'!モジュール名.testB", date1
End Sub

受け側の一例
Option Explicit
Public date2 As Object
Sub testB(date1) 'Application.Runで実行される
MsgBox date1(0) '確認用
Set date2 = date1 '受け側のトリガーで実行できるように別変数に
End Sub

Sub testC() '受け渡し側ブックの別プロシージャ
MsgBox date2(0)
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
とても分かりやすい説明でした。

お礼日時:2023/06/06 11:28

No1,2です。


「Excel VBA 別Bookへの値渡」でしたね。見落としてました。
失礼しました。No1,2は無視してください。
    • good
    • 0

No1です。


マクロを実行する場合は、
Sub モジュール間テスト()
を実行してください。
    • good
    • 0

以下のようにしてください。


module1:
Public date1 As Object

Sub testA()
'連想配列の定義
Set date1 = CreateObject("Scripting.Dictionary")
date1(0) = "A"
date1(1) = "B"
date1(2) = "C"
End Sub
-----------------------------------
module2:
Sub testB()
MsgBox date1(0) ' ←ここで使用したい
End Sub

------------------------------------
module3:
Sub モジュール間テスト()
Call testA
Call testB
End Sub

実行結果
添付図参照

Sub モジュール間テスト()はmodule3でなくても構いません。
module1,module2のどちらかに格納しても問題ありません。
「マクロについて教えてください。」の回答画像1
    • good
    • 0
この回答へのお礼

分かりやす説明をありがとうございます

お礼日時:2023/06/06 21:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!