|
>秀丸マクロからWSHを起動してVBAを呼出し、
>下のようなコードを実行させるっていうのは、変でしょうか?
>
>Selection.Comments.Add Range:=Selection.Range, Text:=MyTex
多くの場合はできないケースのほうが多いと思いますが、ワードの場合は
GetObjectで対象docファイルのオブジェクトを取得して秀丸マクロと同時に操作
できるようです。
これを利用するとできるようです。
VBAではなく、WSHを介して外部のJSを実行する形ですが、以下のようにしてでき
ました。
●秀丸マクロ
#objWordApp=createobject("Word.Application");
setpropnum #objWordApp,"Visible",-1;
#objDocuments = member(#objWordApp, "Documents" );
callmethod #objDocuments, "Open", "c:\\folder\\test.doc";
#objSelection = member(#objWordApp, "Selection" );
callmethod #objSelection, "WholeStory"; //全選択
//★js経由で実行
//objSelection.Comments.Add( objSelection.Range, 文字列 );
$file = "c:\\folder\\test.docx";
$text = "コメント";
runsync2 "wscript.exe test.js "
+ "\"" + $file + "\" "
+ "\"" + $text + "\"";
//★js経由で実行 ここまで
●test.js の内容
objWord = GetObject( WScript.arguments(0) ); //$file相当
objWordApp = objWord.Application;
objSelection = objWordApp.Selection;
objSelection.Comments.Add( objSelection.Range,
WScript.arguments(1) ); //$text相当
コマンドラインに対象ファイルと文字列を渡して、JS側でも同時にオブジェクト
を取得して操作してみたらできました。
ワードはうまくできていて可能でしたが、奇抜な方法で普通では無理があると思
います。
前にh-tomさんの話があったとき、メソッドのパラメータをオブジェクトで試行
してやる方法も1つ検討していて、手元のバージョンでは可能でした。
ただ仕様が固まらず保留にしていました。
従来の文法になるべく影響を与えない方法を思いついきましたが、新しい文(例
えば allowobjparam; といった感じ)を事前に実行しておくとオブジェクトのパ
ラメータも試行するといった方式にすると、簡単に可能ではあります。
そういう方向で検討してみます。
|
|