|
▼KOCCI さん:
>とても勉強になりますが、ごめんなさい、解説をお願いしたく、
>
>> Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
>
>これはどういったものでしょうか?
こんにちは。
説明なしで、失礼をばいたしました。
実は以下のような事情を説明するのがめんどかったので、
スキップしてました。
上のサンプルでは、
クリップボードの文字列を取得するために
DataObject というオブジェクトを使っていますが、
これは MSForms ユーザーフォームに付属するもので、
VBE のメニュ−から ツール>参照設定 で
Microsoft Forms 2.0 Object Library
にチェックを入れると利用可能になります。
ところが、お使いのPCの環境によっては ツール>参照設定 の
リストに Microsoft Forms 2.0 Object Library がないことが
あります。
これまで、そのような場合の対処方法として、
VBE の挿入 メニュ−から ユーザーフォームをプロジェクトに
追加する、という方法が用いられてきました。ユーザーフォームを
挿入すると 配下の DataObject への参照が成立する、というわけです。
このばあい、挿入したUserForm そのものは すぐ解放してもかまわない、
UserForm を解放しても DataObjectへの参照は保持されている、
ということです。
さて、WScriptオブジェクトなどの COMオブジェクトを使うとき、
事前に参照設定する方法と、
プログラム実行時に動的に CreateObject する方法があるのは
ご存知ですよね.
Set Fso = CreateObject("Scripting.FileSystemObject")
とか、
Set dic = CreateObject("Scripting.Dictionary")
という構文を見かけられたことがあるかと思いますが、
こういう風に、事前に参照設定せずとも DataObject が
実行時に動的に CreateObject できれば、お使いの環境で
参照設定のウィンドウに
Microsoft Forms 2.0 Object Library がなくても
かまわないわけです。
ところが、 上の例に倣って、
Set Dto = CreateObject("MSForms.DataObject")
とやっても、DataObject は Createできないのです。
そこで、他の掲示板で shira さんが紹介された方法を
用いると、Set Dto = CreateObject("MSForms.DataObject")
と結果同じことができるようになるってわけです。
以下、その時の shira さんの解説を引用します
> 以前に、参照設定せずに MSForms.DataObject
> のインスタンスを作成したいという旨の質問が
> あった時に、APIで作成する方法を回答しましたが、
> Win2000/XP以降のOSでは、上のサンプルで使って
> いるような、newモニカの機能もありましたね。
>
> Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
> With GetObject("new:" & CLSID_DataObject)
> .SetText "Test"
> .PutInClipboard
> End With
>
> この方がずいぶんお手軽だと思います。
> Office2000(VBA6)以降では、上記のGetObjectを
> CreateObjectに変えても動くと思います。
> でも個人的には、GetObjectの方が適切と考えます。
|
|