質問

質問者:kayonon Callステートメント(エクセル)
困り度:
  • 困っています
Sub test()
 Set x = Application.InputBox(Prompt:="テスト", Type:=8)
  スクリプト
   Call abc
   Call def
   Call ghi
  スクリプト
End Sub

上記マクロで、"x"が"Call"で指定したプロシージャ内でも使えるようにするには、どのような指定が必要になるでしょうか?
質問投稿日時:06/05/02 05:44
質問番号:2126364
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:masa_019 > "x"が"Call"で指定したプロシージャ内でも使えるようにするには・・・

簡単なのは、xを宣言セクションで宣言してモジュールレベルの変数にする方法だと思います。

Option Explicit
Dim x As Object ←☆ここで宣言する

Sub test()
Set x = Application.InputBox(Prompt:="テスト", Type:=8)
Call abc
End Sub

Sub abc
MsgBox x.Address
End Sub

上記のようにすると、xはモジュール内の他のプロシージャ内で自由に使えます。

他にもCallで呼び出す時に引数として渡す方法もあります。
下のようにして、xをabcプロシージャに渡します。

Option Explicit

Sub test()
Dim x As Object
Set x = Application.InputBox(Prompt:="テスト", Type:=8)
Call abc(x)
End Sub

Sub abc(ByRef x As Object)
MsgBox x.Address
End Sub

この場合、ByRefは省略しても良いです。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:06/05/02 07:44
回答番号:No.2
この回答へのお礼有難うございました。

回答

良回答10pt

回答者:imogasi Sub test()
Set X = Application.InputBox(Prompt:="テスト", Type:=8)
abc X
End Sub

Sub abc(X)
MsgBox X.Address
End Sub
で動きました。
Callを使うなら、Call abc(X)です。
本当は モジュールレベル変数
Private X を 宣言部に書く。(または Private x As Range)
下記「モジュールレベル変数は Private なものです。 」参照。
http://www.bcap.co.jp/hanafusa/VBHLP/hensu.htm
http://homepage1.nifty.com/CavalierLab/lab/vb/implicit.html
種類:回答
どんな人:一般人
自信:自信あり
回答日時:06/05/02 08:42
回答番号:No.4
この回答へのお礼有難うございました。
最新から表示回答順に表示良回答のみ表示