インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

GetObject関数でWordやPowerpointを起動する方法

なぜか 久々にダンまち に読み入ってしまい,何もできていない(;´▽`A``

ワールドトリガーといい,ダンまちといい 何度も何度も読んでいるんですが,何度読んでも面白い。

はやく続きが読みたいなぁ( ´ー`)...でも葦原先生,体をお大事にされてください_(._.)_


さて,タイトルのGetObject 私はこれが大嫌いです。

他の方が触れている記事を見ても,自分がいつもやるCreateObjectでの解決法しか考えきれなかったんですが,GetObjectを使いたいという方にそれを示すのは筋が違いますね。

akashi-keirin.hatenablog.com


私は,大雑把な部分と,石橋をたたいて壊すような部分の両方を持っているので,

GetObjectで自分が目的とするものを取得できると,正直思っていません。

でも,IEを制御するつもりとか言ってますし,IEに限らず既に開いているものを制御できないといけないと思うので,いいきっかけだからきちんと確認してみようと思いました。


私を取り巻く環境では Word,Powerpoint,Excel,IEを制御できてWord,Powerpoint,Excelにデータを流し込めれば,その他に望むことはほぼありません。

ただ,確実に進めたいといことがあり,既に開いているウィンドウを捕捉する,ということはまずやらずに来ました。

でも,そこを身に着ければだいぶ話が変わるので,きちんと考えてみようと思います。


今は都合がよいことに,今のOfficeアプリはSDI形式のものばっかりなんですね。助かるなぁ。

Officeアプリの制御はとてもやりやすいですね,ほぼ同じ表現になります。

Word

Sub test2()
    Dim WDApp As Word.Application
    Set WDApp = GetObject(, "Word.Application")
    Dim WDDoc As Document
    
    Stop
End Sub

f:id:chemiphys:20170224224748p:plain
ローカルウィンドウで確認できていない頃は,とても不安なままだったわけですが,このコードを書いて,ローカルウィンドウで確認すると,その挙動に納得がいきます。

これなら怖がれずに使えますし,Collectionについてだいぶ使い慣れた今では,
インデックスで制御したり,ファイル名をキーとしてオブジェクトを狙い撃ちして変数に放り込める自信が沸きます。

Powerpoint

Sub test3()
    Dim PPTApp As PowerPoint.Application
    Set PPTApp = GetObject(, "Powerpoint.Application")
    Dim PPPresen As Presentation
    Stop
End Sub

f:id:chemiphys:20170224225336p:plain

パワーポイントで二つのオブジェクトを開いているんですが,ちゃんとプレゼンテーションのItem1,Item2があります。
nameプロパティにはファイル名がそれぞれ入っていますね。Excelのシートをシート名で制御するくらいの簡単さでそれぞれを指定することができます。

こんなに簡単だったんだ。

今まで完全に避けていたのがもったいなく感じるレベルですね。
Excelも全く同じ作法で開けますので,逆にExcelを制御する場合も簡単ですね。

IEは・・けっこう違いますね。しかもローカルウィンドウの情報となかなかあわない・・・(ノД`)・゜・。

ヨクワカラナイゾ。。仕方ない,慣れるしかないよね。

Sub test()

Dim colSh As Shell32.Shell
Set colSh = New Shell32.Shell
Dim win As Object

For Each win In colSh.Windows
    If TypeName(win.Document) = "HTMLDocument" Then
        Debug.Print win.Document.Title
    Else
        Debug.Print win.Name
    End If
    
Next
Stop
End Sub

これでタイトルで補足して,動作に入る,という感じになるんだと思います。


今は全然慣れないので,参照設定を利用しています。
f:id:chemiphys:20170224233137p:plain

あとこの本とにらめっこしています。

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応


IEは先が長いなぁ。。まぁ3月中には使いこなせるようになろう。

あと,テキストをがんがん使わないといけないでしょうから 正規表現も・・・((((;゚Д゚))))