タイトル : Re: createobject 投稿日 : 2012/06/13(Wed) 17:34 投稿者 : 魔界の仮面弁士
> createobjectを使って他の起動中のアプリケーションのオブジェクトを > 取得していています。 何を CreateObject しているのでしょうか? InternetExplorer.Application? Shell.Application? Excel.Application? > このマクロをWin7x64の環境で実行すると、 OS は 64bit 版との事ですが、その上で動作させようとしている VBA7 は 64bit版でしょうか? それとも 32bit版ですか? > createobject実行時に、すでに起動中のオブジェクトを取得せずに、 それが普通だと思いますよ、"Create" するのですから。 とはいえ、こうした動作は各オブジェクトごとに事情が異なるのも事実です。 たとえば起動済みの InternetExplorer オブジェクトを取得する場合、環境によって、 Set IE = GetObject(, "InternetExplorer.Application") で動作する場合もあれば、 Set IE = GetObject("", "InternetExplorer.Application") で動作する場合もあります。前者がエラーになるけど後者は使えるとか、その逆とか、 あるいは既存オブジェクトの取得になる環境と新規起動になる環境とがあったりと。 一応、InternetExplorer に限って言えば、ShellWindows コレクション経由で Set SO = CreateObject("Shell.Application") Set ShWins = SO.Windows() For Each IE In ShWins MsgBox IE.LocationURL Next のようにして列挙すれば、GetObject よりは環境依存度を減らすことはできます。 ただ、すべてのオブジェクトが、こうした列挙機能を持っているわけでは無いので、 対象アプリケーションそれぞれで、個別に対応は必要になってくると思います。 ちなみに Excel や Access などであれば、ROT から辿る方法が使えます。 VBA7 向けのコードでは無いですが、VB.NET 向けのサンプルであればこのあたり。 http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=10322&page=0 >(getobjectを使用すると、オブジェクトが取得できない旨のエラーがでます。) > コードを少し変更すれば、使えるようになる等の情報があれば助かります。 現時点でどのようなコードを書いているのかが分からない以上、 それをどのように直すべきか指摘することは敵いません…。(^^;) |