マクロ(添付ファイル圧縮 by 7-zip)についNo.42470
くらくら さん 12/03/30 11:40
 
マクロ(添付ファイル圧縮 by 7-zip)にて、受信メールの添付ファイルを一括圧縮し
ようとしましたが、マクロ実行エラー(while文異常)が発生します。
また、他の圧縮マクロでは、ファイル名に[]があると添付ファイルが消える現象が出
ています。
それも合わせて、本マクロで改善していただけると幸いです。
すみませんが、確認と修正をお願いします。

[ ]
RE:42470 マクロ(添付ファイル圧縮 by 7-zNo.42474
秀まるお2 さん 12/03/30 16:03
 
 マクロ実行時のエラーメッセージには、「while文異常」っていうそのままの
メッセージは存在しないと思います。

 すみませんがもうちょっと具体的なエラーメッセージの内容を教えて欲しい所
です。

 エラーが出るとしたら、もしも秀丸メールのバージョンが古い(V5.70よりも
古い)ようでしたら、最新版に入れ替えていただることで解決しそうな気がしま
す。

[ ]
RE:42474 マクロ(添付ファイル圧縮 by 7-zNo.42475
くらくら さん 12/03/30 19:31
 
失礼しました。
もう少し詳細にコメントいたします。

秀丸メールのバージョン:5.75
使用したマクロ:添付ファイル圧縮-7zip.mac (2012.02.24付のもの)

手順は以下で行いました。
1. 添付ファイルを圧縮したい受信メールを選択
2. 上記マクロを実行
3. 「現在選択しているメール(複数も可)の添付ファイルを圧縮します。よろしいで
すか?」に対して、「はい」を選択。
4. エラーウィンドウ
------------------------------------------------------------
マクロエラー:数値が指定されるべき所に数値以外のものが指定されています。
エラー箇所の内容(変換した内容)
while() {
        $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
------------------------------------------------------------

以上の通りです。
宜しくお願い致します。

[ ]
RE:42475 マクロ(添付ファイル圧縮 by 7-zNo.42476
秀まるお2 さん 12/03/30 19:43
 
 すみません。たしかにマクロにバグがありました。

 136行目の、

                while() {

 となってる所を、

                while(1) {

 と書き換えていただければうまくいくかなぁと思います。

 こちらでもテストしてみます。

[ ]
RE:42476 マクロ(添付ファイル圧縮 by 7-zNo.42477
秀まるお2 さん 12/03/30 19:50
 
 テストしてみたら、while(1)に直したとしてもうまく動かないみたいでした。

 直してまた書き込みさせていただきます。

[ ]
RE:42476 マクロ(添付ファイル圧縮 by 7-zNo.42478
くらくら さん 12/03/30 19:53
 
早速の回答に感謝いたします。
"While()" -> "while(1)"にしてみたところ、圧縮しているDOS画面が出て終了するの
ですが、マクロがエンドレスでループしているようで、マクロの実行を中断しました。
小生が試したメールは添付が2ファイルあるもので、添付ファイルのあるフォルダを
確認したところ、1つめのファイル名(aaaaa.xls)がaaaaa.xls.zipになっており、zip
には2ファイル分圧縮されていました。
が、2ファイル目のファイルは元のファイル名のまま残っていました。
何か参考になりますでしょうか。

[ ]
RE:42478 マクロ(添付ファイル圧縮 by 7-zNo.42479
秀まるお2 さん 12/03/30 22:25
 
 お手数かけてすみません。

 秀丸メール本体上で圧縮する方の処理は1回もテストしてませんでした。で、修正
箇所ですが、

   while() {

 となってる箇所を

   while(1) {

 に直すのとは別に、そこから23行くらい下の方(先頭からだと158行目付近)
に、

                #i = 0;
                while( #i < #count ) {
                    #n = dllfunc("Bypass_SetFileAttributes", $path[#i], 0x00
000020);        // ReadOnlyを解除。
                    #n = dllfunc("Bypass_DeleteFile", $path[#i]);
                }

 って処理があるんですが、そのループが無限ループしてしまってました。

                #i = 0;
                while( #i < #count ) {
                    #n = dllfunc("Bypass_SetFileAttributes", $path[#i], 0x00
000020);        // ReadOnlyを解除。
                    #n = dllfunc("Bypass_DeleteFile", $path[#i]);
                    #i = #i + 1;
                }


 のように、ループの中の一番下に、「#i = #i + 1;」って行を入れていただくと直
ります。

 それでどうでしょうか。

[ ]
RE:42479 マクロ(添付ファイル圧縮 by 7-zNo.42498
くらくら さん 12/04/04 21:57
 
確認と返信が遅くなり、大変申し訳ございませんでした。
ご指示いただいた内容にマクロを変更して実行したところ、問題なく動作しました。
大変助かりました。

今後とも宜しくお願い致します。

[ ]
RE:42498 マクロ(添付ファイル圧縮 by 7-zNo.42500
秀まるお2 さん 12/04/05 08:53
 
 確認ありがとうございます。

 うちのホームページのライブラリの方も入れ替えさせていただきます。

[ ]