COM呼び出しでファイルがすでに開いているNo.07950
おすぎ さん 15/11/26 15:57
 
お世話になっております。

またまた教えて下さい。

COM呼び出しでワードファイル等を開くとき、
同ファイルがすでに開いていると、
「読み取り専用」になってしまって不都合になることが良くあります。

ファイルがすでに開いていても、
初めて開く場合と同じように処理を進ませることはできないでしょうか?

考えつくのは、すでに開いていたら一度閉じて再び開く方法ですが、
もっとスマートな方法があったら教えてください。

よろしくお願いします。




[ ]
RE:07950 COM呼び出しでファイルがすでにNo.07952
h-tom さん 15/11/26 23:13
 

h-tom です。

>ファイルがすでに開いていても、
>初めて開く場合と同じように処理を進ませることはできないでしょうか?
目的のファイルを開いているWordを探して、操作すれば良いのでは?

[ ]
RE:07952 COM呼び出しでファイルがすでにNo.07953
秀丸担当 さん 15/11/27 09:09
 

いつもの回答になってしまいますが、秀丸マクロとしてはvbsやjsのやり方をマ
クロの文法に合わせたものがあるだけになっています。
vbsやjsで方法があれば、それを秀丸マクロの文法に合わせて書き直すというだ
けになります。

既存のものを利用するには、vbsやjsでも使えるGetObjectというものがあるよう
です。
それに相当する秀丸マクロではgetobject関数になります。

例えば、
#objWordApp=getobject("","Word.Application");
とすると、手元のWord2013で確認した限りでは既存のワードになるようです。

#objDocuments=getobject("c:\\folder\\test.docx");
とすると、既存の開いているドキュメントになるようです。

これらを組み合わせてやるということになると思いますが、あらゆるケースに対
応できるかどうかはワード側がどうやっているかによると思います。

既存のものが無ければ新しく起動する例:
$file="c:\\folder\\test.docx";

#objWordApp=getobject("","Word.Application");
if(#objWordApp==0){
    #objWordApp=createobject("Word.Application");
    setpropnum #objWordApp,"Visible",-1;
}
#objDocuments = getpropobj(#objWordApp, "Documents" );
callmethod #objDocuments, "Open", $file;

[ ]
RE:07953 COM呼び出しでファイルがすでにNo.07954
おすぎ さん 15/11/27 09:32
 
h-tom さん
秀丸担当さん

ありがとうございました。

やってみます。

[ ]