No.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 の時がほとんどだと思います。
ただ、練習やテストには、事前バインディングして、そのメソッドやプロパティを調べておくほうがよいと思います。もちろん、事前バインディングしている限りは、そのヘルプが出てきます。
Wendy02さん、ありがとうございます。返答が遅くなりました。
確かに、小生、VBAを長くやっておりますが、しかし、結構、分かっていないことがあります。今回、Wendy02さんが示してくれたことは、直ぐには分からずとも、勉強の方向を示していてくれます。何とか、やっていこうと考えております。ありがとうございました。
No.3
- 回答日時:
こんばんは。
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
とやって見ましたが、型が違うと蹴られてしまいました。
すいません。サジェスチョンをお願いいたします。
No.2
- 回答日時:
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
は同類の質問か。
imogasiさん、ありがとうございます。
お陰さまで、何とかなりそうです。
エクセルからPowerPointを動かそうとしています。
Dim myPPApp as Object
Dim myPpPrs as Object
Set myPPApp = CreateObject("PowerPoint.Application")
Set myPpPrs =myPPApp.presentation
PPlayoutTitleOnlyなんかは、理解してくれないので、
PowerPointを調べて 「11」と直接与えてやりました。
PCによって、参照設定のバージョンが異なったりして、動かないのを対策しなければいけないのです。
ありがとうございました。
No.1
- 回答日時:
こんばんは。
具体的な質問の意図が良く分かりませんが、実際に、コードを書こうとしてみれば、すぐに気がつくはずです。オートメーションに対応しているアプリケーションのみしか、クラス名が入りません。それに、実行時バインディングは、必ずしも調子が良いとは限らないはずです。
ありがとうございます。
この辺のところ、何かもやもやとしていたのですが、
何とかなりそうです。
エクセルからPowerPointを動かそうとしています。
Dim myPPApp as Object
Dim myPpPrs as Object
Set myPPApp = CreateObject("PowerPoint.Application")
Set myPpPrs =myPPApp.presentation
PPlayoutTitleOnlyなんかは、理解してくれないので、
PowerPointを調べて 「11」と直接与えてやりました。
PCによって、参照設定のバージョンが異なったりして、動かないのを対策しなければいけないのです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルで対象日に該当するデータがある場合に別表へ全対象者を表示させたい。 3 2023/07/12 09:48
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- ネットワーク しばらくするとネットワークの参照ができなくなる 4 2023/06/17 16:56
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Excel(エクセル) Excelの関数について教えてください。 5 2023/07/28 11:27
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで MSCOMCT2.OCX 参照不...
-
パソコンへの「Dropbox...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
実行時エラー 438になった時の...
-
ユーザーフォームを表示中にシ...
-
C#,vb.netで業務用アプリ開発と...
-
VBA(エクセル)で自動的にボタン...
-
エクセル・VBA CheckBoxのオブ...
-
ウォッチ式の文字数制限について
-
ExcelVBAのユーザーフォームの...
-
マクロで、次のコードへ行く前...
-
ListBoxで改行したい
-
Hideについて(.NET)
-
Access VBA でデータペーストを...
-
マクロについて教えてください...
-
Excel VBA セルの名前があるか...
-
ユーザーフォームのテキストボ...
-
Form_Load と Form_Activate の...
-
IF文に時間(何時から何時ま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで MSCOMCT2.OCX 参照不...
-
LaTeX 自設定のcounterに labe...
-
UserNameを取得したい
-
VBAに於ける参照設定
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
実行時エラー 438になった時の...
-
ユーザーフォームを表示中にシ...
-
「Columns("A:C")」の列文字を...
-
エクセルエラー13型が一致しま...
-
ウォッチ式の文字数制限について
-
フォームの再読み込み
-
【C#/Java?】try-catchでcatch...
-
カメラスクロールするのを動画...
-
クリックイベントなのに、2回ク...
-
エクセル・VBA CheckBoxのオブ...
-
ListBoxで改行したい
-
eclipseのデバッグ中に変数の値...
-
ユーザーフォームに別シートか...
おすすめ情報