COMマクロのワイルドカードの取り扱いにつNo.06992
おすぎ さん 12/06/04 15:53
 
立て続けですみませんが、こちらも教えて下さい。

COMマクロで、ワイルドカード「*」を使った検索をする場合、
どう書けば良いでしょうか?


下のような感じでは、うまくいかないようです。

#objmyRangeFind = getpropobj(#objmyRange, "Find");
setpropnum #objmyRangeFind, "Wrap", 0;
setpropnum #objmyRangeFind, "MatchWildcards", 1;
callmethod #objmyRangeFind, "Execute", "<" "*" + ">";


すみません。
よろしくお願いいたします。

[ ]
RE:06992 COMマクロのワイルドカードの取No.06993
アルビレオ さん 12/06/04 16:03
 
ユーザーのアルビレオです。

>callmethod #objmyRangeFind, "Execute", "<" "*" + ">";

"<" と "*" の間に + が抜けてるだけじゃないでしょうか
試しに
 message "<" "*" + ">";
を実行してみると
 *>
が表示されました

[ ]
RE:06993 COMマクロのワイルドカードの取No.06994
おすぎ さん 12/06/04 16:43
 
アルビレオさん

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

そこは単に、私の書き込みミスです。

次のようにキチンと書いても、動作しないようです。
callmethod #objmyRangeFind, "Execute", "<" + "*" + ">";

[ ]
RE:06994 COMマクロのワイルドカードの取No.06996
秀丸担当 さん 12/06/04 17:26
 

秀丸マクロとしては文法さえ合っていれば、特に指摘すべきところは無いです。
Findオブジェクトの使い方については秀丸エディタの立場としてはわからないで
す。
同じことがvbs/jsでもできなければ秀丸でもできないと思います。

注意すべきところが1つありました。
秀丸マクロの場合実行時のエラーはそのままでは出ないので、getresultexで知
る必要がありました。

setpropnum #objmyRangeFind, "MatchWildcards", 1;
message "成否:"+str(getresultex(10)) +"\n"
      + "エラーコード:"+hex(getresultex(11));

callmethod #objmyRangeFind, "Execute", "<" + "*" + ">";
message "成否:"+str(getresultex(10)) +"\n"
      + "エラーコード:"+hex(getresultex(11));

という感じで1つずつチェックするとどこで失敗しているかがわかると思います。
参考までにMatchWildcardsを使う場合はMatchAllWordForms,MatchFuzzy,
MatchSoundLikeを全部0にしておかないといけないのかもしれないですが、詳し
くないのでそれでいいのかどうかわかりません。

[ ]
RE:06996 COMマクロのワイルドカードの取No.06997
秀丸担当 さん 12/06/04 17:30
 
補足です。
MatchSoundLikeではなくてMatchSoundsLikeでした。

[ ]
RE:06997 COMマクロのワイルドカードの取No.06998
おすぎ さん 12/06/05 10:22
 
秀丸担当さま

ご回答ありがとうございました。
調べた限りでは、vbsでもjsでも、vbaのワイルドカードは使えなさそうです。

ちなみに、次のようなコードを試したところ、
メッセージ「正否:1」、
メッセージ「検索:0」でした。

#objmyRangeFind = getpropobj(#objmyRange, "Find");
setpropnum #objmyRangeFind, "Wrap", 0;
setpropnum #objmyRangeFind, "MatchWildcards", 1;
setpropnum #objmyRangeFind, "MatchAllWordForms", 0;
setpropnum #objmyRangeFind, "MatchFuzzy", 0;
setpropnum #objmyRangeFind, "MatchSoundsLike", 0;

callmethod #objmyRangeFind, "Execute", "<" + "*" + ">";
message "成否:" + str(getresultex(10));

#Found = getpropnum(#objmyRangeFind, "Found");
message "検索:" + str(#Found);


重ねて、ありがとうございました。



[ ]
RE:06998 COMマクロのワイルドカードの取No.07006
h-tom さん 12/06/06 20:31
 

h-tom です。

>ご回答ありがとうございました。
>調べた限りでは、vbsでもjsでも、vbaのワイルドカードは使えなさそうです。
こちらでは、VBS、秀丸マクロでも、ワイルドカードを有効にした検索は、
正常に行われましたよ。

Rangeオブジェクトだとわかりづらいので、Selectionオブジェクト使って
確認してみてはどうでしょうか?

[ ]
RE:07006 COMマクロのワイルドカードの取No.07009
おすぎ さん 12/06/08 15:36
 
h-tom さま

ご連絡ありがとうございます。
次のようなコードを試してみましたが、やはりダメでした。

1 #objwordApp = createobject("Word.Application");
2 #objSelection = getpropobj(#objwordApp, "Selection");
3 #objSelectionFind = getpropobj(#objSelection, "Find");
4 setpropnum #objSelectionFind, "Wrap", 0;
5 setpropnum #objSelectionFind, "MatchWildcards", 1;
6 setpropnum #objSelectionFind, "MatchAllWordForms", 0;
7 setpropnum #objSelectionFind, "MatchFuzzy", 0;
8 setpropnum #objSelectionFind, "MatchSoundsLike", 0;
9 callmethod #objSelectionFind, "Execute", "<p/" + "*" + "/p>";
10 #Found = getpropnum(#objSelectionFind, "Found");

@5行目で、"MatchWildcards", 1 にすると正否は 0 です。
      "MatchWildcards", 0 にすると正否は 1。
A9行目は、正否はいつも 1 です。

結局、"MatchWildcards = 1" に指定できないために、うまく動作しないようです。

ちなみに、「WORD 2000」を使っています。


>こちらでは、VBS、秀丸マクロでも、ワイルドカードを有効にした検索は、正常に行
>われましたよ。
 h-tom さんの場合は、何が違うのでしょう?
 WORDのバージョン?

[ ]
RE:07009 COMマクロのワイルドカードの取No.07013
h-tom さん 12/06/08 16:30
 

h-tom です。

>@5行目で、"MatchWildcards", 1 にすると正否は 0 です。
>      "MatchWildcards", 0 にすると正否は 1。
>A9行目は、正否はいつも 1 です。
Selctionオブジェクト使うなら、"MatchSoundsLike"のあとで、"MatchWildcards"
を設定して下さい。
プロパティ設定毎に、エラーの確認をすれば、失敗していることがわかります。

#秀丸マクロで、COMを操作する前に、WSHで動作確認することをお勧めします。
#MatchWildcardsも、WSHで実行すれば、親切にエラーメッセージ出してくれます。

>ちなみに、「WORD 2000」を使っています。
XP+Word2000、Vista+Word2007、7+Word2010で問題ないです。

サンプルだから、大丈夫かと思いますが、createobject で Wordオブジェクト
作成していますが、中身はあるんですよね?

[ ]
RE:07013 COMマクロのワイルドカードの取No.07014
おすぎ さん 12/06/08 17:16
 
h-tom さま

ご指摘ありがとうございました。以下の並びで無事に成功しました。

#objSelection = getpropobj(#objwordApp, "Selection");
#objSelectionFind = getpropobj(#objSelection, "Find");
setpropnum #objSelectionFind, "MatchSoundsLike", 0;
setpropnum #objSelectionFind, "MatchFuzzy", 0;
setpropnum #objSelectionFind, "MatchWildcards", 1;
setpropnum #objSelectionFind, "Wrap", 1;
callmethod #objSelectionFind, "Execute", "<p/" + "*" + "/p>";


>秀丸マクロで、COMを操作する前に、WSHで動作確認することをお勧めします。
当方は、一翻訳者でして、プログラミングには疎いです。
つたないVBAの知識でCOMマクロに挑戦しておりまして、
WSHまでは勉強できておりません。今後の課題です。

重ねて、ありがとうございました。

[ ]