22

Application.Runを使用せずに特定のワークシートで可能であるため、別の指定されたブックのモジュールからVBA関数またはメソッドを呼び出す方法があるかどうかを知りたいです。

ワークシートの場合、たとえば次のように呼び出すことができます。

ActiveSheet.MyTest() 

MyTestがシートモジュールで定義されている場合

しかし、モジュールで定義されている関数を呼び出したいのですが

私は試した :

ActiveWorkbook.MyTestModule()
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)

エラーの生成が機能しないオブジェクトはこのメソッドをサポートしていません

電話できます

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)

しかし、Application.Runのエラー処理についてはよくわかりません。メソッドを直接実行すると、よりクリーンになります。

4

2 に答える 2

30

呼び出したいブック(これをAと呼びます)に、呼び出したいブック(これをBと呼びます)への参照を次のように追加できます。

  1. ブックAで、Microsoft Visual Basic for Applicationsウィンドウを開きます(たとえば、Alt+を押しF11ます)。
  2. [ツール]、[参照]を選択します。
  3. 表示される[参照]ダイアログで、[参照]を選択します。
  4. 表示される[参照の追加]ダイアログで、[ファイルの種類]ボックスから[Microsoft Excelファイル]を選択し、呼び出すファイル(B)を選択して、[開く]を選択します。
  5. [OK]を選択して、[参照]ダイアログを閉じます。

ファイルAでは、ファイルAにあるかのようにファイルBのパブリックモジュールレベルの関数を呼び出すことができるはずです。名前の競合を解決するために、ファイルBの「プロジェクト名」で呼び出しの前に付けることができます。 [プロジェクトのプロパティ]ダイアログの[全般]タブ(Microsoft Visual Basic for Applicationsの[ツール]メニューの[プロパティ]コマンドからアクセスできます)。たとえば、ファイルBの「プロジェクト名」が「VBAProjectB」の場合、構文VBAProjectB.Fを使用してファイルAから関数Fを呼び出すことができます。

于 2012-04-04T15:56:07.253 に答える
1

ちなみに、これは別のブックのカスタムデータ型にアクセスする場合にも機能します。

' In workbook ABC, project name Library

Public Type Book_Data
   Title As String
   Pub_Date As Date
   Pub_City As String
End Type

' In workbook DEF (after a ref to Library)
Dim Book_Info As Library.Book_Data

Book_Info.Title = "War and Peace"
Debug.Print Book_Info.Title
于 2018-03-27T00:36:23.477 に答える