COMマクロを使ってWORDを開くNo.06937
おすぎ さん 12/05/16 14:21
 
秀丸からワードファイルを開くマクロを作ってみましたが、
起動させても何も起こりません。

#objWord = getobject ("C:\\Folder\\test.doc");
callmethod #objWord, "run", "C:\\Program Files\\Microsoft Office\\Office\\WI
NWORD.EXE";
endmacro;

どこがおかしいのか、教えていただけますと、助かります。

よろしくお願いいたします。

[ ]
RE:06937 COMマクロを使ってWORDを開くNo.06938
秀まるお2 さん 12/05/16 16:06
 
 comを使うやり方は僕はよく分からないのですが、とりあえず、Wordで
ファイルを開くだけなら、

    openbyshell "C:\\Folder\\test.doc";

 だけでいいと思います。

[ ]
RE:06938 COMマクロを使ってWORDを開くNo.06939
おすぎ さん 12/05/16 16:20
 
秀まるお2さま

お返事ありがとうございます。

実は、秀丸からcomを使ってwordファイルを操作する方法を模索中です。

具体的には、comを使って次のことをしたいと思っています。
1.特定のワードファイルを開く
2.中身の文章を処理する(置換等を行なう)

無理っすかね…?


> comを使うやり方は僕はよく分からないのですが、とりあえず、Wordで
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> だけでいいと思います。

[ ]
RE:06939 COMマクロを使ってWORDを開くNo.06940
秀丸担当 さん 12/05/16 16:57
 

vbsやjsでできるようなことであれば、だいたいのことは秀丸マクロの文法に置
き換えて可能だと思います。

まずはvbsやjsで作ってみて、それで動作確認してみて、その後文法を置き換え
るといいと思います。

getobjectを使った方法では、試してみたところでは以下のような感じでできま
した。

例:
//jscriptの場合
//  objWord = GetObject("c:\\folder\\test.doc");
//  objWordApp = objWord.Application;
//  objWordApp.Visible = true;
//jsを秀丸マクロに文法を置き換えたもの
    #objWord = getobject("c:\\folder\\test.doc");
    #objWordApp = getpropobj(#objWord,"Application");
    setpropnum #objWordApp, "Visible", -1;
    endmacro;


ワードのオブジェクトの使い方については、すみませんが詳しくはわからないで
す。
runというオブジェクトがワードにあるのかどうかということも秀丸エディタと
してはわからないです。
まずはvbsやjsで試してみるとわかると思います。


置換もWeb検索するなどしてvbsやjsのサンプルがあれば、それを元に秀丸マクロ
の文法に置き換えるとできると思います。

本題とは違うことですが、参考までに、以前試しに作ってみたマクロで以下のよ
うなものがありました。
ワードを起動して貼り付けて全て選択してコピーする、というものです。

#objWordApp=createobject("Word.Application");
//setpropnum #objWordApp,"Visible",-1;
#objDocuments = member(#objWordApp, "Documents" );
callmethod #objDocuments, "Add";
#objSelection = member(#objWordApp, "Selection" );
callmethod #objSelection, "Paste";
callmethod #objSelection, "WholeStory";
callmethod #objSelection, "Copy";
//setpropnum #objWordApp,"Visible",0;
//callmethod #objWordApp,"Quit", 0

[ ]
RE:06940 COMマクロを使ってWORDを開くNo.06941
おすぎ さん 12/05/16 17:15
 
秀丸担当さま

ご丁寧なご回答をありがとうございます。

まだWSHを勉強し始めたばかりでして、
仰せの通り、vbsやjsで動作確認してから、
秀丸comマクロに置き換えていこうと思います。

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

[ ]
RE:06941 COMマクロを使ってWORDを開くNo.06942
おすぎ さん 12/05/17 11:57
 
秀丸担当さま

すみません。もう少し教えて下さい。

教えていただいたマクロでは、"新規"ワードファイルしか開かなかったのですが、
Web検索等でアレコレやって、次のマクロで動作確認ができました。

 #objshell = createobject("WScript.Shell");
 #objword = createobject("Word.Application");
 setpropnum #objword, "Visible", -1;
 $file = "c:\\folder\\test.doc";
 #documents = getpropobj(#objword, "Documents");
 #objdoc = callmethod_returnobj(#documents, "Open", $file);
 endmacro;

質問です。
開いたwordファイルに、クリップボードから文章をペーストすることも
同時にしたいと思っています。

その場合、参考にすべきproperty、method は、VBAのものでしょうか?
それともWSH のものになるのでしょうか?

[ ]
RE:06942 COMマクロを使ってWORDを開くNo.06945
秀丸担当 さん 12/05/17 13:56
 

>その場合、参考にすべきproperty、method は、VBAのものでしょうか?
>それともWSH のものになるのでしょうか?

VBA(Wordの)とWSHでオブジェクトの違いがあるのかどうかわかりませんが、WSH
(つまりVBSまたはJS)で確認されるほうが確実だと思います。

明らかな違いとしては、wdStoryとかのワード固有の定数はWSHでも秀丸マクロで
も使えないので、数値で示す必要があると思います。


//jsの例
objWordApp=new ActiveXObject("Word.Application");
objWordApp.Visible=true;
objWordApp.Documents.Open("c:\\folder\\test.doc");
objSelection=objWordApp.Selection;
objSelection.Move(6);//wdStory
objSelection.Paste();


//秀丸マクロの例
#objWordApp=createobject("Word.Application");
setpropnum #objWordApp,"Visible",-1;
#objDocuments = member(#objWordApp, "Documents" );
callmethod #objDocuments, "Open", "c:\\folder\\test.docx";
#objSelection = member(#objWordApp, "Selection" );
callmethod #objSelection, "Move", 6;//wdStory
callmethod #objSelection, "Paste";
endmacro;

[ ]
RE:06945 COMマクロを使ってWORDを開くNo.06946
秀丸担当 さん 12/05/17 14:00
 

秀丸マクロの例の拡張子が.docxになっていました。

このスレッドに書かれていたファイルと同じサンプルにするとしたら、4行目は
callmethod #objDocuments, "Open", "c:\\folder\\test.doc";
としたほうがよかったです。

[ ]
RE:06946 COMマクロを使ってWORDを開くNo.06947
おすぎ さん 12/05/17 16:09
 
秀丸担当さま

ご丁寧なご回答ありがとうございます。

しつこくて申し訳ありませんが、
2つほど質問させて下さい。

(1)頂いたjsと秀丸マクロの例に「selection」というプロパティが
   使われていますが、これはWSHのプロパティなのでしょうか?
   ちょっと調べた限りでは、VBAにはあるが、WSHにはないようです。
   間違っていたらすみません。

(2)秀丸マクロのmember文について教えて下さい。
   これは、callmethod文やgetprop文と、どう使い分けるのでしょうか?
   いつもmember文だけ使っていても良いのでしょうか?

[ ]
RE:06947 COMマクロを使ってWORDを開くNo.06948
秀丸担当 さん 12/05/17 16:53
 

>(1)頂いたjsと秀丸マクロの例に「selection」というプロパティが
>   使われていますが、これはWSHのプロパティなのでしょうか?
>   ちょっと調べた限りでは、VBAにはあるが、WSHにはないようです。
>   間違っていたらすみません。

SelectionはWSHでも秀丸マクロでも使えるようです。

Selectionは、秀丸エディタやWSHが知るものではなくて、ワードのオブジェクト
(Word.Application)のメンバの1つとして存在するオブジェクトということに
なります。
秀丸エディタやWSHの立場からすると、とあるオブジェクトの中にSelectionとい
うオブジェクトがあるかどうか試してみたら、あった、ということになります。

秀丸エディタやWSHでも、Word.Applicationのオブジェクトを取得すれば、その
オブジェクトの中からSelectionというオブジェクトが取得できるようです。

SelectionやDocumentのオブジェクトさえ取得できれば、あとはWordのVBAの例を
だいたい使えそうな気がします。(すみませんが全く同じかどうかはわからない
です)
VBAの例でも、定数(wdXXXXXのような固定値)を数値に置き換えるとできそうで
す。


>(2)秀丸マクロのmember文について教えて下さい。
>   これは、callmethod文やgetprop文と、どう使い分けるのでしょうか?
>   いつもmember文だけ使っていても良いのでしょうか?

memberは、オブジェクトかプロパティの文字列か数値かなど全て試行してみて成
功したものがあれば返します。
callmethodやgetpropnumなどは、どういう種類のメンバかを明示的に指定します。

例えば、秀丸マクロではオブジェクトも単なる数値として扱うので、
#a=member(#obj,"xxx");
と書くと、事前に知っていないと#aがオブジェクトなのか数値なのか不明です。
続いて、
setpropnum #obj,"yyy",#a;
とかしたりすると、もし#aがオブジェクトだったとしたら、意味のない数値を設
定することになります。

事前にわかっていることであれば、いつもmember文/member関数を使っていても
問題無いです。

[ ]
RE:06948 COMマクロを使ってWORDを開くNo.06949
おすぎ さん 12/05/17 17:28
 
秀丸担当さま

ご丁寧な説明をありがとうございました。

WSHやCOM等の勉強を始めたばかりなため、
理解が中途半端な状態で質問しまして、
ご迷惑をおかけしました。

大変勉強になりました。

>SelectionやDocumentのオブジェクトさえ取得できれば、あとはWordのVBAの例を
>だいたい使えそうな気がします。

このコメントは貴重でした。おかげで、もやもや感がだいぶ消えました。

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

[ ]