|
多摩川 さん、Jakaさん、こんばんは。
Runメソッドの便利な点は、Jakaさんの目安箱を見ていただくとして・・・、
>Call は Excel 以外からも呼び出し可,
>Application.Run は Sub, Function, Property の各プロシージャのみを呼び出すExcel限定ってことなのでしょうか?
ん?Runメソッドだって、APIを呼び出すことだって出来ます。
例 新規ブックの標準モジュールに
'===========================================================
Declare Function GetAsyncKeyState Lib _
"User32.dll" (ByVal vKey As Long) As Long
'===========================================================
Sub test()
Dim inkey As Long
Do While Run("GetAsyncKeyState", 40) = 0
DoEvents
Loop
MsgBox "ok"
End Sub
testを実行すると、↓キーが押されると反応し、「ok」と表示されます。
runメソッドは、呼び出しを文字列で指定できる点が利点ですが
、
文字列であるがゆえにCallステートメントより、処理が遅い と思います。
又、Runメソッドの引数は、全て値渡しですから、
呼び出し先でデータを返すような引数は使えません。
例 新規ブックの標準モジュールに
'===================================================================
Sub main()
Dim x, y, z
x = 1
y = 2
z = 0
Call 足し算(x, y, z)
MsgBox z 'きちんと1+2=3の3を表示します
z = 0
Application.Run "足し算", x, y, z
MsgBox z 'こっちは、0のまま
End Sub
'================================================================
Sub 足し算(ByVal a, ByVal b, ByRef c)
c = a + b
End Sub
上記のmainを実行してみてください。
|
|