Run は Run でも微妙に違う

Excel にも Word にも、Run メソッドがあります。
Excel2007 と Word2007 で Run の実験をしてみたら、少々おもしろい結果になりました。
 
まず、Excel と Word について、それぞれ標準モジュールを2つ挿入しておき、Module1 に

Public X As String

Sub TestMain()
  On Error Resume Next
  X = "モジュール名なし"
  Application.Run "MacroM"
  Application.Run "MacroG"

  X = "モジュール名あり . の場合"
  Application.Run "Module2.MacroM"
  Application.Run "Module2.MacroG"

  X = "モジュール名あり ! の場合"
  Application.Run "Module2!MacroM"
  Application.Run "Module2!MacroG"
  On Error GoTo 0
End Sub

Module2 に

Private Sub MacroM()
  Debug.Print "MacroM  " & X
End Sub

Public Sub MacroG()
  Debug.Print "MacroG  " & X
End Sub

と書いておきます。
 
で、実行してみると、、、
Excelの実行結果】

MacroM  モジュール名なし
MacroG  モジュール名なし
MacroM  モジュール名あり . の場合
MacroG  モジュール名あり . の場合

【Wordの実行結果】

MacroM  モジュール名なし
MacroG  モジュール名なし
MacroM  モジュール名あり . の場合
MacroG  モジュール名あり . の場合
MacroG  モジュール名あり ! の場合

と、見てのとおりです。
 
めんどくさいから詳しく調べないけど、多分バージョンによって結果は変わるような気がします。
 
↓のMOUGのスレッドの質問に書かれている現象と違っているようですから。
MOUG Excel VBA掲示板  2007/05/27(日)10:44:35
『Runメソッドで呼び出せるプロシジャーのスコープについて』
http://www2.moug.net/bbs/exvba/20070527000007.htm
質問の中身は、要約すると

 Excel と Wordで Run メソッドでの呼び出し先のスコープ指定によって
 実行できる場合とできない場合の結果が異なるのは何故?
 Word では、文書名またはプロジェクト名を指定すると Public のものしか
 実行できないが、指定しないと Private でも呼び出せるのは何故?

といった感じです。
 
それと、これはバグなんじゃないかと思いますが、Word で

  Application.Run "Module2!MacroG"

と書いたときは、実は ! の前にデタラメのモジュール名を書いても実行できます。
 
※.Excel World の 2007年5月28日 01:36 の日記をコピーしています。
http://excel.sns.fc2.com/excel/