複数ファイルパスワード操作(Excel)

複数のExcelファイルに同じパスワードがセットされている場合に、それを一括して解除して保存するマクロです。
逆に一括してパスワードをセットすることもできます。

最初にダイアログでパターンを訊かれますので、解除ならば「はい」、セットならば「いいえ」を選択します。
次にダイアログでパスワードをセットします。
最後にファイルが保存されているフォルダを指定します。下位階層には対応していません。
「”\*.xls”」の部分を適宜、変更してください。
Excel2007で確認しました。

Sub 複数ファイルパスワード操作()
    Dim myfolder, myfn, myword, pwopen, pwclose
    Dim pattern
    '操作を選択
    pattern = MsgBox("パスワード解除ならば「はい」、セットならば「いいえ」", vbYesNo)
    If pattern = vbCancel Then
        Exit Sub
    End If
    'パスワードをセット
    myword = InputBox("パスワードを入力。")
    If pattern = vbYes Then
        pwopen = myword
        pwclose = ""
    ElseIf pattern = vbNo Then
        pwopen = ""
        pwclose = myword
    End If
    'フォルダを選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "操作したいファイルのあるフォルダを選択"
        .AllowMultiSelect = False
        If .Show = -1 Then
            myfolder = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    'ファイルを操作
    myfn = Dir(myfolder & "\*.xls", vbNormal)
    Do Until myfn = ""
        Call ファイル開閉(myfolder & "" & myfn, pwopen, pwclose)
        myfn = Dir
    Loop
End Sub
Function ファイル開閉(myfn, pwopen, pwclose)
    Workbooks.Open Filename:=myfn, Password:=pwopen
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=myfn, Password:=pwclose, WriteResPassword:=""
    Application.DisplayAlerts = True
    ActiveWorkbook.Close
End Function

コメント

  1. […] You Look Too Cool » 複数ファイルパスワード操作 それのWord版を作ってみました。Word2007で確認しました。 Sub […]

  2. maro より:

    はじめまして。
    業務で必要な内容を検索で見つけて訪問させていただいています。
    初心者で勉強中なので、まだまだVBAを使い慣れていません。
    そのため、初歩的な質問で大変恐縮です。
    エクセル2010で使用してみたところ、下記のところでエラーとなりました。
    「実行時エラー1004」でフォルダ内に格納している一番上のダミーのファイル名が表示され「見つかりません」とのこと。

    Workbooks.Open Filename:=myfn, Password:=pwopen

    フォルダはデスクトップに作成し、マクロのファイルも同じフォルダに格納し、
    ダミーで複数のPWなしファイルに対して一括でセットしようとしていました。

    初歩的な質問で大変恐縮ですがが、ご教示お願いできますでしょうか。
    どうぞよろしくお願いいたします。

  3. stabucky より:

    >maroさん
    環境によって動かないケースがあるようです。
    「Call ファイル開閉(myfn, pwopen, pwclose)」
    の部分を
    「Call ファイル開閉(myfolder & “\” & myfn, pwopen, pwclose)」
    のように書き直してください。本文は修正済みです。
    使い方は合っていると思います。
    よろしくお願いします。

タイトルとURLをコピーしました