Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8680 / 13646 ツリー ←次へ | 前へ→

【31812】変数を引き継ぎたいです つつ 05/11/30(水) 14:12 質問[未読]
【31814】Re:変数を引き継ぎたいです ichinose 05/11/30(水) 14:23 発言[未読]
【31824】Re:変数を引き継ぎたいです つつ 05/11/30(水) 16:10 お礼[未読]
【31835】Re:変数を引き継ぎたいです ichinose 05/11/30(水) 18:11 発言[未読]
【31848】Re:変数を引き継ぎたいです つつ 05/12/1(木) 0:26 お礼[未読]
【31819】Re:変数を引き継ぎたいです Kein 05/11/30(水) 15:30 発言[未読]

【31812】変数を引き継ぎたいです
質問  つつ  - 05/11/30(水) 14:12 -

引用なし
パスワード
   教えてください。

Application.Run "macro2"

として、macro1からmacro2を実行したときに
macro2内で使用した変数i(バリアント)が
macro1に戻ったときにEmptyとなっていて
引き継げないです。
マクロ実行をした際に、変数の中身を
引き継ぐことはできないのでしょうか?

【31814】Re:変数を引き継ぎたいです
発言  ichinose  - 05/11/30(水) 14:23 -

引用なし
パスワード
   ▼つつ さん:
こんにちは。

>
Application.Run "macro2",変数i

とした場合ということですか?

だとしたらこれは無理です。
Runメソッドのパラメータは値渡しですから・・・。


macro2をFunctionプロシジャーに変更するか

このmacro2というプロシジャーがmacro1と同じブックにあるのなら、

call macro2(変数i)

としてください。(但し、macro2は、macro1と同じブックの
標準モジュールにあるとします)


>
>として、macro1からmacro2を実行したときに
>macro2内で使用した変数i(バリアント)が
>macro1に戻ったときにEmptyとなっていて
>引き継げないです。
>マクロ実行をした際に、変数の中身を
>引き継ぐことはできないのでしょうか?

【31819】Re:変数を引き継ぎたいです
発言  Kein  - 05/11/30(水) 15:30 -

引用なし
パスワード
   どんなコードか分かりませんが、とりあえずグローバル変数を使って受け渡しを
してみたらどうでしょーか ?

【31824】Re:変数を引き継ぎたいです
お礼  つつ  - 05/11/30(水) 16:10 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。

>Application.Run "macro2",変数i
>とした場合ということですか?
>だとしたらこれは無理です。
>Runメソッドのパラメータは値渡しですから・・・。

値渡しというのはどういう意味でしょうか?
私のコードは,

Application.Run "macro2"
と書いていただけで
Application.Run "macro2",変数i
とはしていなかったのですが。。


macro2というプロシジャーはmacro1と同じブックにあり、
かつ標準モジュールにあります。
一度、call macro2(変数i)
というのを試してみます。

【31835】Re:変数を引き継ぎたいです
発言  ichinose  - 05/11/30(水) 18:11 -

引用なし
パスワード
   ▼つつ さん:
こんばんは。

>値渡しというのはどういう意味でしょうか?
↑これは、次回にしましょう!!
>Application.Run "macro2"
>と書いていただけで

だとするとパラメータ渡しということではなさそうなので・・・。

ここからは、想像です。

標準モジュールに
'================================
Sub macro1()
  Dim 変数i As Variant
  Application.Run "macro2"
  MsgBox 変数i
End Sub
'=========================
Sub macro2()
  変数i = 500
End Sub

こんなコードで「変数iはEmptyです」とおっしゃっているのでしょうか?
だとしたら、これは、そうなります。

macro1の中の変数iとmacro2の中の変数iは、同じ名前の変数でも
別の変数だと解釈されますから、macro1の変数iには500は入っていません。

では、どうすればよいかと言うと、

'==========================================================
Private 変数i As Variant
Sub macro1()
  Application.Run "macro2"
  MsgBox 変数i
End Sub
'==========================================================
Sub macro2()
  変数i = 500
End Sub

とすればmacro1の
Msgbox 変数i
で500と表示されます。

さらにこの場合、Runメソッドは必要ないので

'========================================================
Private 変数i As Variant
Sub macro1()
  Call macro2
  MsgBox 変数i
End Sub
'=========================================================
Sub macro2()
  変数i = 500
End Sub


記述できます。

それとここからは、仕様にもよりますが、
'==========================
Sub macro1()
  Dim 変数i As Variant
  Call macro2(変数i)
  MsgBox 変数i
End Sub
'=======================================
Sub macro2(Macro2の出力データ As Variant)
  Macro2の出力データ = 500
End Sub

これがパラメータ渡しです。

これらの例題コードとつつさんのコードとを
比べてみてください。

【31848】Re:変数を引き継ぎたいです
お礼  つつ  - 05/12/1(木) 0:26 -

引用なし
パスワード
   ▼ichinose さん:
大変ありがとうございます。

>'==========================================================
>Private 変数i As Variant
>Sub macro1()
>  Application.Run "macro2"
>  MsgBox 変数i
>End Sub
>'==========================================================
>Sub macro2()
>  変数i = 500
>End Sub

の方法でうまくいきました。

本当にありがとうございました。

8680 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free