昨日見た夢を教えて下さい

ブックBのシート(*)に関数 sub aaaを定義します。

(*)シートオブジェクト名を任意のものに変更します。(→eee)

この時、ブックAのVBAからブックBを開き、その参照を得て(workbook型の
wbという名前の変数に格納します。)、「Call wb.eee.aaa」と
呼び出すことができると思っていましたが、"オブジェクトは
そのメソッド/プロパティを持っていません"という旨のエラーが
出て、呼び出すことができませんでした。

どのようにしたら呼び出すことができるようになりますか。

aaaはpublicで定義しています。

A 回答 (2件)

> aaaはpublicで定義しています。



Workbook型の変数では、ユーザーが独自に定義したメソッドを呼び出せなくなります。
(Workbookオブジェクトに定義された(=組み込み済みの)メソッドしか呼び出せない)

そのオブジェクトを受ける変数の型をObject型にすれば、独自に定義したaaaメソッドを
呼び出すことができるかと思います。
(「Dim wb As Object」と宣言すればOk、と)


なお、VBEのメニューから「ツール(T)→参照設定(R)」で『参照設定』ダイアログを開き、
『参照(B)』ボタンを押して、ブックBへの参照設定を行うと、
 Dim wb As VBAProject.eee
といった宣言も可能になり、eeeシートに定義したPublicなプロパティ/メソッドに対して
インテリセンスによる入力支援を有効にすることもできますので、併せて参考まで。
(上記での「VBAProject」には、VBEのメニューで「ツール(T)→○○のプロパティ(E)」
 で開く『プロジェクトプロパティ』ダイアログの『全般』タブにある『プロジェクト名(N)』を
 指定します)

但し、ブックAを開くと同時に毎回ブックBが開かれることになりますので、運用できる
場面は限られるかと思いますが(汗)
    • good
    • 0
この回答へのお礼

以下な感じで他ブックのシートに定義されている関数を呼び出すことが
できました。sshがworkbookだと関数がうまく呼び出せなかったので、
参考にさせていただき助かりました。ご回答ありがとうございました。

Private Sub CommandButton1_Click()

Dim wb As Workbook
Dim path
Dim ssh As Object

path = Application.GetOpenFilename("Microsoft Excelブック,*.*")
Set wb = Workbooks.Open(path)


Call get_ob(wb, ssh, "eee")'コードネームからシートオブジェクト取得

Call ssh.aaa

wb.Close (False)
Set wb = Nothing

End Sub

'コードネームからシートオブジェクト取得
Sub get_ob(wb, ssh, name)
Dim sh As Object

For Each sh In wb.Worksheets
If sh.CodeName = name Then
Set ssh = sh
Exit For
End If
Next

End Sub

お礼日時:2013/02/03 22:10

こんなかんじでできました



Call Application.Workbooks("Book1").Sheets("Sheet1").test

Call Application.Workbooks(ファイル名).Sheets(シート名).プロシージャ名

シート名は、対象の Worksheet の Name プロパティを指定します。

オブジェクト名はプロジェクト単位で通用するグローバルなシンボルのようです。
プロジェクト単位(ブック)を超えてプロシージャを参照するには、Application オブジェクト経由でワークブックの名前とオブジェクトの名前(Name プロパティ)で対象のオブジェクトを解決する必要があるようです。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2013/02/03 22:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報