忍者ブログ

指定したファイルやフォルダをzip化するマクロを作るのをやめた

2020年11月29日
前回作成したリンク先を修正するマクロをベースにして、
指定したファイルやフォルダをzip化するマクロを作りたい!!

画面レイアウトは、前回のまんまで、リンク先を置換するところを
zipファイルに圧縮するモジュールに変えればいいじゃん。

調べると、zip化は①PowerShellを使うか②外部ライブラリを使うからしい。
VBAでZIP圧縮と解凍を行う | Excel作業をVBAで効率化 (vbabeginner.net)

パスワードが使えないのと2Gまでと制約があるけど、
VBAと親和性の高いPowerShellを使うことに。


ファイル名重複に備えて、拡張子を取得する処理を作ったり、
別ファイル名を自動指定する処理を作りかけたところで
PowerShellの仕様をよく見ると、コマンドを強制実行するオプションがある。

日本語版!【Compress-Archive】の最新説明書/PowerShell 5.1 | 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- (cheshire-wara.com)

そもそも、VBAでPowerShellを呼び出すんだったら最初からPowerShellで
実行すればいいじゃんという話で開発中止。
(VBAを動かしているときはエクセル使えないからね)


代わりに、PowerShellに直接貼り付けられるシートを作ってみた。



オプションの項目を数値で指定すると、出力されるコマンドが変化。
C列のDirは、VBAのDir関数を呼び出してファイル有無をチェック。

PowerShellは、ワイルドカードに対応しているけど、
コマンド生成処理はそこまでできなかった。。。


PowerShellはいままで使ったことがなかったけど、
これから活躍してくれそうです。


2020/12/1 追記

13,000ファイル以上あるフォルダで試してみたところ数時間かかってエラーで止まってた。。。

wifiが不安定なせいか、NASがしょぼいのか。

ここまで書いておいてなんですが、
コマンドをまとめて作って一気に張り付ける使い方を想定していたけど、
今の自分環境では使い物にならなそうです。




2023/12/24追記

そういや、結局バッチファイルは作ったんだった。powershellをコマンドプロンプトから呼び出すのって簡単なので、指定フォルダをZip化するバッチは一行でいける。
VBAからバッチを実行はやったことあるけど、PowerShell を直接呼び出すのは経験ないな。

過去記事
Zip化するバッチとスクリプト


PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字