COM呼び出しマクロの質問ですNo.08061
おすぎ さん 16/02/03 11:23
 
いつもお世話になっております。
またまたCOMがらみで教えて下さい。

(1)次のWORD VBAは、
Paragraphs.LeftIndent = 10

次のような秀丸マクロに書き換えられると理解しています。
setpropnum #objParagraphs, "LeftIndent", 10;


(2)では次のWORD VBAは、秀丸マクロに書き換えられるんでしょうか?
Paragraphs.LeftIndent = MillimetersToPoints(10)


無知な質問ですみません。


[ ]
RE:08061 COM呼び出しマクロの質問ですNo.08062
秀丸担当 さん 16/02/03 15:17
 

MillimetersToPointsで検索してみたら、VBSでもWord.Applicationのメンバとし
て使えるようです。

以下のVBS
Set objWordApp = CreateObject("Word.Application")
pt=objWordApp.MillimetersToPoints(10)

これを秀丸マクロに書き換えるとしたら、以下のようになるはずです。

#objWordApp=createobject("Word.Application");
#pt=callmethod_returnnum(#objWordApp,"MillimetersToPoints",10);

しかしこれは残念ながら動きませんでした。
MillimetersToPointsは整数ではなく、小数を伴う実数のみのようです。
秀丸マクロで扱えるのは整数だけで、秀丸マクロで扱うことはできませんでした。
整数のパラメータを渡す時点で受け付けないようです。

MillimetersToPointsのやっていることは単位の変換だけのようなので、小数点
以下が切り捨てられてしまいますが、2.85倍するだけでよければ以下のようにし
て回避できると思います。

#mm = 10;
#pt = #mm * 285 / 100; //MillimetersToPointsの代わり
setpropnum #objParagraphs, "LeftIndent", #pt;

[ ]
RE:08062 COM呼び出しマクロの質問ですNo.08063
おすぎ さん 16/02/03 15:44
 
秀丸担当さま
ありがとうございます。

MillimetersToPoints はマクロでは無理でしたか。
残念です。

マクロを使って、LeftIndent に正確に 35mm を指定したかったのですが、
現状は、99 points 指定で ÷2.85 の 34.9mm にしかなりません。
何か良い手はないかと思っていたところです。

お手数をおかけしました。
重ねてありがとうございました。

[ ]
RE:08063 COM呼び出しマクロの質問ですNo.08064
おすぎ さん 16/02/03 16:49
 
ひょっとして、
浮動小数点バージョンの秀丸を使えば良いのでしょうか?

35mm × 2.85 = 99.75 points

→ 9975E-2 と入力すれば 良いのでしょうか?

[ ]
RE:08064 COM呼び出しマクロの質問ですNo.08065
秀丸担当 さん 16/02/03 17:19
 

浮動小数点数バージョンであっても、setpropnumについてはCOMを通して整数と
いうことには変わりないのです。

LeftIndentで数値ではなく、文字列を渡してみたらうまくいくようです。
setpropstr #objParagraphs, "LeftIndent", "9975E-2";
という文字列指定で、Word 2013の場合はうまくいきました。
もしかしたらWordのバージョンによるかもしれません。

MillimetersToPointsで検索すると2.85とありますが、正確には2.8346のようで
す。(Word 2013の場合だけかも)

#mm = 35;
#ptE4 = #mm * 28346; //ポイントを1万倍した整数
setpropstr #objParagraphs, "LeftIndent", str(#ptE4)+"E-4"; //1万分の1

[ ]
RE:08065 COM呼び出しマクロの質問ですNo.08072
おすぎ さん 16/02/04 09:57
 
秀丸担当さま

仰る通りの内容でうまくいきました(Word 2015 です)。
(1)設定を、数字→文字列
(2)定数を、2.85→2.8346

大感激です!!
これで作業が大幅に時間短縮されます。
ありがとうございました。

でもなぜ文字列だとうまくいくのか理解できません。
何かお分かりのことがあったら教えて下さい。

[ ]