Excel VBA質問箱 IV

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

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


56948 / 76732 ←次へ | 前へ→

【24525】Re:別のブックのマクロの実行と結果について
発言  ichinose  - 05/4/24(日) 9:58 -

引用なし
パスワード
   ▼mitu さん:
おはようございます。

>早速のご回答ありがとうございました。
>具体的な方法をご教示して頂き助かりました。
>
>ついでで恐縮ですが、ちょっとつまづきましたので、質問させてください。
>
>呼び出される側のマクロは、bookのモジュールで、標準モジュールでは、ダメなんですね。

投稿した方法は、オブジェクトモジュールを呼び出す方法ですから
標準モジュールではできません。呼び出し元のブック(b.xls)でブック(a.xls)を
参照設定等しておけば可能です(この方法でもよいなら、方法を説明しますが、
私も可能な事を確認はしていますが、実際のこの手のコードを使用した事はないです)。


>そして、bookは事前に開いておく必要があるのですね。
これは、Runメソッドだって同じなんですけどね!!
ただ、1行で記述できるか否かの問題でRUNメソッドだってブックを開いていますよ。

前回の投稿のブックB.XLSの標準モジュールで
'============================================
Sub test()
  Dim aa As Long
  Dim bb As Long
  Dim cc As Long
  aa = 2
  bb = 3
  Call Workbooks.Open("D:\My Documents\a.xls").caller_proc(aa, bb, cc)
  MsgBox cc
End Sub

とすれば、予め開いておかなくてもよいです。
これだって、ブックのオープンとプロシジャー呼び出しを1行に記述しただけです。

前回の投稿で
>Runメソッドの引数はByvalつまり、値渡しですからサブプロシジャーの
出力変数として使えませんよ!!

と申し上げました。これは、引数として変数を渡したときの話で、
絶対に無理ということではなく
工夫すればいくつかの方法はあります。

例えば、
D:\My Documents\a.xlsにブックa.xlsは、保存されているとしましょう。

このブックの標準モジュールにサブプロシジャーではなくファンクションプロシジャーを
記述します。


'============================================================
Function call_test(a As Long, b As Long)
  Dim ans(1 To 4)
  ans(1) = a + b
  ans(2) = a - b
  ans(3) = a * b
  ans(4) = a / b
  call_test = ans()
  Erase ans()
End Function

これは、入力引数として与えられたa,bに対して四則演算の結果を返すFunctionです。


これをb.xlsから呼び出すには、

'================================
Sub test2()
  Dim aa As Long
  Dim bb As Long
  Dim cc As Variant
  aa = 2
  bb = 3
  cc = Application.Run("'D:\My Documents\a.xls'!call_test", aa, bb)
  For idx = LBound(cc) To UBound(cc)
   MsgBox cc(idx)
   Next
End Sub

なんてすると、四則演算の結果が得られます。
これは、Functionを使用しても外部呼出しでは、call_testという手続きを通してしか出力データを得る事が出来ないので、配列にして複数の結果を得るという例です。

他にも出力先にセルアドレスを指定して指定したセルに値を返す
と言う方法も考えられます(ブックには、必ず、セルが付いているのですから
このセルを利用すると言う方法です)。

というように工夫すればやりようはあります。

試してみて下さい。

0 hits

【24512】別のブックのマクロの実行と結果について mitu 05/4/23(土) 20:39 質問
【24513】Re:別のブックのマクロの実行と結果について ichinose 05/4/23(土) 21:37 発言
【24522】Re:別のブックのマクロの実行と結果について mitu 05/4/24(日) 3:28 質問
【24525】Re:別のブックのマクロの実行と結果について ichinose 05/4/24(日) 9:58 発言
【24528】Re:別のブックのマクロの実行と結果について mitu 05/4/24(日) 13:18 お礼

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