プロが教えるわが家の防犯対策術!

参照設定にチェックマークを入れることをせずに、createObjectだけで
済ませることはできないものでしょうか?
宜しくお願いいたします。

A 回答 (4件)

こんにちは。

Wendy02です。

今回のようなケースを扱う人というのは、VBAがかなり上級の人向けだと思います。ですから、なるべく自力解決を望んでいます。どちらかというと、Access のように、実行ファイルを単独配布というような状況にいる場合で、あまりExcelでは、そういう問題に直面しません。

理由は、ひとつは、最終的には、ユーザーさんに、参照設定をし直してもらうということと、バージョン的に、Excel2000 で作成しておいて、上位バージョンで走らせるというケースが多いからではないかと思います。

>(1) 他人のマクロにて、参照設定をしている上、パスワードロックが掛けられているものを使いたい時。

これは、時々見かけます。相手は一応、お金をもらっているのでプロでしょうけれども、その程度のエラーを想定できないのかなって思いました。Office の専門でないと、こういうのを甘く見るようです。

>ThisWorkbook.VBProject.References.Remove "Microsoft PowerPoint 10.0 Object Library"

これは違います。Remove の後は、オブジェクトです。

なお、以下のように、IsBroken として、壊れていなければ、外す必要はありません。
また、私は、"POWERPOINT" を持っていませんので、ライブラリの実際の名称は、確認してください。

なお、実際には動かしておりません。

Sub CheckReference()
  Dim vbProj As Object
  Dim Ref As Object
  Dim myOlb As String
  myOlb = Application.Path & "\MSPpt.olb"
  Set vbProj = ActiveWorkbook.VBProject
  For Each Ref In vbProj.References
    If Ref.IsBroken And InStr(1, Ref.Name, "POWERPOINT", 1) > 0 Then
      vbProj.References.Remove Ref
     Application.VBE.ActiveVBProject.References.AddFromFile myOlb
    End If
  Next
 Set vbProj = Nothing
End Sub

通常は、環境によって変わりますから、Application.Path で、パス名を取得します。
タイプライブラリ名は、 MSPpt.olb

>(2) 自分が作るときには、参照設定を使いたくない。

事前バインディングか、実行時バインディングかは、こちらでどうこういう問題ではないです。しかし、単に、恣意的な問題だともいえません。確実とは言いませんが、ある程度のパフォーマンスの違いは出てくるとは思います。実行時バインディングをせざるを得ないのは、GetObject の時がほとんどだと思います。

ただ、練習やテストには、事前バインディングして、そのメソッドやプロパティを調べておくほうがよいと思います。もちろん、事前バインディングしている限りは、そのヘルプが出てきます。
    • good
    • 0
この回答へのお礼

Wendy02さん、ありがとうございます。返答が遅くなりました。
確かに、小生、VBAを長くやっておりますが、しかし、結構、分かっていないことがあります。今回、Wendy02さんが示してくれたことは、直ぐには分からずとも、勉強の方向を示していてくれます。何とか、やっていこうと考えております。ありがとうございました。

お礼日時:2007/07/07 10:20

こんばんは。



ppt 自体は分かりませんが、参照設定の場合は、確か、私の記憶では、下のバージョンからの設定には通るのですが、上のバージョンで下にいくほうが通らないことが多かったように思います。

参照設定をプログラム的にすると、Excelの場合は、

ThisWorkbook モジュールで、
ThisWorkbook.Open

ThisWorkbook.VBProject.References.AddFromFile

一旦、Remove で外して、それを、AddFromFile で設定しなおすようなことをします。

この回答への補足

Wendy02さん、ありがとうございます。
今、小生には2つの問題があります。
(1) 他人のマクロにて、参照設定をしている上、パスワードロックが掛けられているものを使いたい時。
(2) 自分が作るときには、参照設定を使いたくない。
-------------
(1)については、removeして、AddFromFile をしてやればよいのかと考え、
Sub test()
ThisWorkbook.VBProject.References.Remove "Microsoft PowerPoint 10.0 Object Library"
End Sub
とやって見ましたが、型が違うと蹴られてしまいました。
すいません。サジェスチョンをお願いいたします。

補足日時:2007/07/02 22:51
    • good
    • 0

http://www.accessclub.jp/samplefile/samplefile_8 …
http://www.moug.net/tech/acvba/0010004.htm
にアクセスの例があるように、エクセルVBAでもコードで参照設定することは可能だと思うので調べて見られたら。
ーー
(1)まずそのソフトのをプログラムライブラリが物理的にそのパソコンにあること(インストール済み)。
(2)そのソフトが参照設定で使える仕組みで作られていること。
オブジェクト・クラス敵な仕組みになっている。
機能が部品的に分化して、一部でも使えるようになってないと、参照設定の対象ではないでしょう。オブジェクト集団がまとまっていること(オブジェクト・メソッド集団など。オブジェクトプラウザのような機能細分化)
(3)特定のオブジェクトを、これを使いますという言語システム(コンパイラかトランスレイターへ)の宣言(参照設定)
エクセルを使っている場合で、自分自身のエクセルのオブジェクトは
自動的に設定するようなことは、行われる(当たり前か)。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
参照設定の箇所
http://www.mahoutsukaino.com/ac/ac2002/vba/vba17 …
(4)特定のオブジェクトをメモリにロードするか、きっかけがあればロードする体制にすること。
ーー
この順序で、それより前のステップがなされて無いと、当ステップは実現不可能と思う。
>参照設定にチェックマークを入れる、は(3)
参照設定は、(1)(2)の完了済みの確認も含む作業と思う。
>createObjectだけで・・、は(4)
だと思うので発想がおかしいと思うが。
ただ(3)までもプログラムで行えば、見かけ上の>参照設定にチェックマークを入れる、作業をせずに済むと思う。
ーー
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
のもあるように、実行時に、現状メモリに無ければ、ある特定の場所のプログラム)ライブラリを見に行くなどの(OSの)仕組みがあれば、そこに存在するかどうかだけが、実行できるかどうかの死命を制する。
ーー
エクセルVBAあたりでは、コードで参照設定をするレベルの言語で
ないということか、解説がほとんど無いようです。
http://oshiete1.goo.ne.jp/qa1593938.html
は同類の質問か。
    • good
    • 0
この回答へのお礼

imogasiさん、ありがとうございます。
お陰さまで、何とかなりそうです。
エクセルからPowerPointを動かそうとしています。
Dim myPPApp as Object
Dim myPpPrs as Object
Set myPPApp = CreateObject("PowerPoint.Application")
Set myPpPrs =myPPApp.presentation

PPlayoutTitleOnlyなんかは、理解してくれないので、
PowerPointを調べて 「11」と直接与えてやりました。

PCによって、参照設定のバージョンが異なったりして、動かないのを対策しなければいけないのです。
ありがとうございました。

お礼日時:2007/07/01 22:26

こんばんは。



具体的な質問の意図が良く分かりませんが、実際に、コードを書こうとしてみれば、すぐに気がつくはずです。オートメーションに対応しているアプリケーションのみしか、クラス名が入りません。それに、実行時バインディングは、必ずしも調子が良いとは限らないはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
この辺のところ、何かもやもやとしていたのですが、
何とかなりそうです。
エクセルからPowerPointを動かそうとしています。
Dim myPPApp as Object
Dim myPpPrs as Object
Set myPPApp = CreateObject("PowerPoint.Application")
Set myPpPrs =myPPApp.presentation

PPlayoutTitleOnlyなんかは、理解してくれないので、
PowerPointを調べて 「11」と直接与えてやりました。

PCによって、参照設定のバージョンが異なったりして、動かないのを対策しなければいけないのです。
ありがとうございました。

お礼日時:2007/07/01 22:24

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