質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

Q&A

解決済

1回答

2814閲覧

Excelマクロで所定フォルダ内のzipファイル(複数)を展開する際に、パスワードが掛かっているzipファイルは展開せずにスキップしたい。

nobinobiko

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

zip

ZIPとは、複数のファイルをひとつにまとめて圧縮したり、圧縮したファイルを展開することができるアーカイブフォーマットです。 1998年以降のWindowsOS各バージョンで、標準の圧縮フォルダとして採用されています。 MacOSでも、X v10.3以降に他の圧縮ソフトとまとめてZIP機能を採用しています。

0グッド

1クリップ

投稿2020/02/08 07:21

所定のフォルダに複数のzipファイルが格納されています。
Excelマクロでこのzipファイルを展開し、別のフォルダに格納しています。

稀にパスワードが設定されているzipファイルがあるため、
パスワード入力画面が表示され、マクロが停止してしまいます。

パスワードが設定されている場合、処理をスキップし、
次のzipファイルの処理を行いたいのですが、スキップさせることは可能でしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://qiita.com/irohamaru/items/6021327a5c39422fa2f4
【VBA】パスワード有無チェックツール

参考になりませんか

http://rururublog.sblo.jp/article/41647067.html
より引用

VBScriptでZIPファイル解凍

Dim ZipFile, ExtractTo, fso, objShell, FilesInZip, objFolder

Const FOF_SILENT = &H04 '進捗ダイアログを表示しない。
Const FOF_RENAMEONCOLLISION = &H08 'ファイルやフォルダ名が重複するときは「コピー ~ 」のようなファイル名にリネームする。
Const FOF_NOCONFIRMATION = &H10 '上書き確認ダイアログを表示しない([すべて上書き]と同じ)。
Const FOF_ALLOWUNDO = &H40 '操作の取り消し([編集]-[元に戻す]や{ctrl}+{z})を有効にする。
Const FOF_FILESONLY = &H80 'ワイルドカードが指定された場合のみ実行する。
Const FOF_SIMPLEPROGRESS = &H100 '進捗ダイアログは表示するがファイル名は表示しない。
Const FOF_NOCONFIRMMKDIR = &H200 'フォルダ作成確認ダイアログを表示しない(自動で作成)。
Const FOF_NOERRORUI = &H400 'コピーや移動ができなかった場合の実行時エラーを発生させない。
'ただし、対象のファイルを飛ばして処理を続けるわけではないことに注意。
Const FOF_NORECURSION = &H1000 'サブフォルダ内のファイルはコピーしない(ただし、フォルダは作成される)。

投稿2020/02/08 10:30

編集2020/02/10 01:00
sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobinobiko

2020/02/10 01:46

ご回答ありがとうございます。 ちょうど、&H400が何か調べているところだったので大変助かりました。 zipを一時フォルダ内に展開して、展開されたファイルの数が0ならパスワード有、 1つ以上ならパスワード無と判断していると理解しました。 CopyHereにオプションを追加することで、パスワード付zipを処理する際のダイアログが出ないようにしているのですね。 試してみたところ、ファイル数をカウントする部分で、 フォルダ配下にファイルが存在していた場合が考慮されていなかっため、 処理を一部変更するとうまくいきました。 (パターンを試したわけではないため、うまくいかない場合もあるかもしれませんが。) ■変更前 Dim buf As String, fileCount As Long buf = Dir(mkDirPath & "*") Do While buf <> "" fileCount = fileCount + 1 buf = Dir() Loop ■変更後 Dim buf As String, fileCount As Long 'オプションvbDirectoryを追加して、標準ファイルとフォルダを対象にする buf = Dir(mkDirPath & "*", vbDirectory) Do While buf <> "" 'カレントフォルダと親フォルダがDirの対象になるためスキップ If buf <> "." And buf <> ".." Then fileCount = fileCount + 1 End If buf = Dir() Loop 本件一旦クローズしますが、実装してみてうまくいかない場合は、改めて質問したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問