|
h-tomさん方式にマクロを直してみました。一応これでWord2000でwinword.exeのプ
ロセスが残らないことだけ確認しました。
---------------------------------------------------------
loaddll "tkinfo.dll";
#attachcount = dllfunc("CountCurrentHeader", "X-Attach");
if( #attachcount == 0 ) {
endmacro;
}
#i = 0;
#okdoc = 0;
$message = "";
#objWord = createobject("Word.Application");
#objDocments = getpropobj(#objWord, "Documents");
while( #i < #attachcount ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach", #i );
if( rightstr( $attach, 4 ) == ".doc"
|| rightstr( $attach, 5 ) == ".docx" ) {
$path = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\" + $at
tach;
#docobj = callmethod_returnobj(#objDocments, "Open",$path);
if( #docobj == 0 ) {
message "Wordドキュメントのgetobjectに失敗しました。";
goto Exit;
}
#revobj = getpropobj(#docobj,"Revisions");
if( #revobj == 0 ) {
message "WordドキュメントからRevisionオブジェクトを取得するのに失敗しま
した。";
goto Exit;
}
#count = getpropnum( #revobj, "Count");
callmethod ##docobj, "Close";
releaseobject #revobj;
releaseobject #docobj;
if( #count != 0 ) {
$message = $message + "\nファイル名 = " + midstr( $attach, strrstr( $att
ach, "\\" ) + 1 );
$message = $message + "\n更新回数 = " + str(#count);
} else {
#okdoc = #okdoc + 1;
}
}
#i = #i + 1;
}
if( $message != "" ) {
$message = "更新履歴付きのWordドキュメントを送信しようとしています。かまわ
ずに続行しますか?"
+ "\n更新履歴付きファイル一覧:\n"
+ $message;
#n = dllfunc("Bypass_MessageBox"
, hidemaruhandle(0)
, $message
, "更新履歴の確認"
, 0x30 + 3 + 0x100 ); //はい/いいえ/キャンセル, デフォルトボタン=いいえ
if( #n != 6 ) {
#n = dllfunc("SetCancel", 1);
goto Exit;
}
} else {
if( #okdoc != 0 ) {
message str(#okdoc) + "個のWordファイルには更新履歴は付いてませんでした。";
}
}
Exit:
callmethod #objWord, "Quit";
releaseobject #objDocments;
releaseobject #objWord;
|
|