Excel VBA質問箱 IV

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

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


2914 / 13646 ツリー ←次へ | 前へ→

【63905】参照設定で参照するブックにあるクラスの参照 UO3 09/12/30(水) 20:32 質問[未読]
【63906】Re:参照設定で参照するブックにあるクラス... ichinose 09/12/30(水) 21:54 発言[未読]
【63907】Re:参照設定で参照するブックにあるクラス... UO3 09/12/30(水) 22:24 お礼[未読]
【63909】Re:参照設定で参照するブックにあるクラス... ichinose 09/12/31(木) 8:42 発言[未読]
【63915】Re:参照設定で参照するブックにあるクラス... UO3 09/12/31(木) 14:49 お礼[未読]
【65318】Re:参照設定で参照するブックにあるクラス... あーあ 10/5/9(日) 1:11 発言[未読]

【63905】参照設定で参照するブックにあるクラスの...
質問  UO3 E-MAIL  - 09/12/30(水) 20:32 -

引用なし
パスワード
   別ブックに作成したクラスを利用する方法を試行錯誤で試しているのですがいまくいきません。別ブックのクラスのInstanncingを2-PulicNotCreatableにすることでDim myCls as と打ち込んだときに別ブックのクラスが表示されるところまでいったんですが実行時にエラーとなります。そもそも、別ブックのクラスは利用できないんでしょうか。
開発環境はExcell2003です。以下にクラスを呼び出しているプロシジャーと別ブックのクラスを貼り付けます。
========呼び出し側
Dim myCls As ILclass
Sub Test()
 Set myCls = New ILclass
 myCls.ILlove = "Nancy"
 MsgBox myCls.ILlove
End Sub
=======別ブックのクラス(クラスモジュール名はILclass)
Private a

Public Property Get ILlove()
ILlove = a
End Property

Public Property Let ILlove(myName)
a = myName
End Property

【63906】Re:参照設定で参照するブックにあるクラ...
発言  ichinose  - 09/12/30(水) 21:54 -

引用なし
パスワード
   ▼UO3 さん:
こんばんは。


>別ブックに作成したクラスを利用する方法を試行錯誤で試しているのですがいまくいきません。別ブックのクラスのInstanncingを2-PulicNotCreatableにすることでDim myCls as と打ち込んだときに別ブックのクラスが表示されるところまでいったんですが実行時にエラーとなります。
NotCreatable ということなので、他のブックでNewキーワードを使っての
インスタンスの作成はできません。

そもそも、別ブックのクラスは利用できないんでしょうか。

クラスモジュールが存在するブックでインスタンスを作成してオブジェクトを返す
関数が必要ですね!!


>========呼び出し側
>Dim myCls As ILclass
>Sub Test()
 Set myCls = workbooks("別ブック.xls").mk_ILclass
> myCls.ILlove = "Nancy"
> MsgBox myCls.ILlove
>End Sub


一例として、別ブック(クラスのあるブック)のThiswokbookのモジュールに
Function mk_ILclass() As Object
  Set mk_ILclass = New ILClass
End Function


>=======別ブックのクラス(クラスモジュール名はILclass)
>Private a
>
>Public Property Get ILlove()
>ILlove = a
>End Property
>
>Public Property Let ILlove(myName)
>a = myName
>End Property

このようにすると可能です。
試してみてください。

【63907】Re:参照設定で参照するブックにあるクラ...
お礼  UO3 E-MAIL  - 09/12/30(水) 22:24 -

引用なし
パスワード
   ichinoseさん

 ありがとうございます。
 この方法しかなさそうですね。目的は達成できますから充分です。
 呼び出す側からメソッドやプロパティが見えないのが、難点というか
 一抹の心許なさはあるんですが。
 参照設定という機能があるんですから、もうひとつ進んで直接利用
 できないかなぁ・・・と欲張った(?)わけですが。
 いつかVBAのエンハンスメントで実現できればいいですね。

【63909】Re:参照設定で参照するブックにあるクラ...
発言  ichinose  - 09/12/31(木) 8:42 -

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

> 呼び出す側からメソッドやプロパティが見えないのが、難点というか
> 一抹の心許なさはあるんですが。

いえ、参照設定する意味はまさにこれですよね?

メソッドやプロパティが見えなくて良いなら、参照設定をしなくても
他のブックのクラスを利用することはできます。
外部のコンポーネントを事前バイディングなしで

 Createobjectを使うのと同じです

呼び出し側で

Dim myCls As ILclass

と宣言できるのですから、インターフェースである
プロパティやメソッドは、見えるはずですよ!!

ただ、Newキーワードが使えるか否か、つまり、インスタンスの作成方法の違いだけです。


まず、クラスのあるブック側をVBEにて、「デバッグ」---「VBAProjectのコンパイル」を行って保存した後、試してみてください。
これを行わないと、見えない場合があるかもしれないので・・・・。

それとも私が

Function mk_ILclass() As Object

と記述したので誤解を招いてしまったのでしょうか?

Function mk_ILclass() As ILclass

という記述は出来ます。

Excel2002で確認しました。

【63915】Re:参照設定で参照するブックにあるクラ...
お礼  UO3  - 09/12/31(木) 14:49 -

引用なし
パスワード
   ichinoseさん

 重ね重ね、ありがとうございます!
 「見えない」と思い込んでいたようです。
 実際にご教示いただいたコードで試したところ、ちゃんと見えました!
 また、参照設定していますので呼び出し側のSETで、別ブック名を省略しても
 正常に動きました。
 年越し前にすっきりした気持ちになれました。
 御礼申し上げます。 

【65318】Re:参照設定で参照するブックにあるクラ...
発言  あーあ  - 10/5/9(日) 1:11 -

引用なし
パスワード
   今更だけど、きづいちゃった。

ichinoseさんの解説で誤解したんじゃなくて、
マルチ先の解説に引きずられたんですね・・・。

www.happy2-island.com/bbs/bbs.cgi?mode=view&no=1288

マルチの賛否は、私は触れませんが
マルチはマルチで宣言するのが礼儀だと思います。

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