저번에는 일괄적으로 암호걸어보기를 했는데 이번에는 패스워드가 걸린 엑셀 파일들을 한꺼번에 해제하거나 암호를 변경해도록 하자. 중요한점은 엑셀 파일의 암호를 알고 있어야한다는 것이다!
1. 동작 순서
1) 패스워드변경.xlsm의 셀 A2에 폴더 경로를 입력. 경로 마지막에 '\' 없어도됨
ex. c:\test
2) 파일불러오기 버튼을 클릭하면 셀 A2 경로의 파일들을 시트에 출력. (확장자는 xlsx, xls, xlsm 등)
3) 목록을 불러오면 현재 비밀번호와 변경할 비밀번호를 입력하고 비밀번호 변경을 클릭
4) 암호 변경 성공 여부에 따라 E열에 결과를 나타냄
2. 시연
폴더 경로는 'C:\패스워드연습'으로 설정하고, 안의 내용물은 위 그림과 같이 다양하게 준비했다. 엑셀 파일은 이름처럼 비밀번호를 486으로 적용한 상태이다. 요기 있는 엑셀 화일들을 한 자리 숫자로 변경 해보겠다.
VBA 동작 시연
셀 A2에 경로를 입력하고 '파일목록 불러오기' 버튼을 클릭하면 폴더 안에 있는 엑셀 화일들이 주르륵 나타난다. 목록이 나타나면 C열에 파일의 현재 비밀번호를 입력하고, D열에는 바뀔 비밀번호나 비워둔다.(비워두면 패스워드 해제)
변경된 비밀번호로 파일을 열어보았다. 움직이는 그림을 보면 아주아주 잘되는 것을 확인 할 수 있다. 그렇다면 변경할 비밀번호에 빈칸으로 두면 파일의 비밀번호가 해제되는지 해보겠다.
현재 비밀번호를 틀리게 하고 변경할 비밀번호에는 빈칸으로 놔두었다. 그 결과 빈칸으로 놔둔 곳은 비밀번호가 해제된 상태로 아주 잘 열리고, 현재 비밀번호를 틀리게 해놓은 파일은 원래 비밀번호 그대로 유지되었다.
3. 마무리 & 코드
1) 폴더 안의 목록 불러오는 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Sub 파일목록불러오기() Dim f1, f2, f3, f4 Dim x As Integer: x = 2 Range("B2:E2000").ClearContents Set f1 = CreateObject("Scripting.FileSystemObject") Set f2 = f1.getfolder(Cells(2, "A")) Set f3 = f2.Files For Each f4 In f3 If InStr(1, f4.Name, ".xls") Then Cells(x, "B") = f4.Name x = x + 1 End If Next f4 End Sub | cs |
2) 패스워드 변경하는 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | Sub PW_Change() Application.DisplayAlerts = False Dim lastr As Integer Dim x As Integer: x = 2 Dim FN() As String Dim pw1() As String Dim pw2() As String lastr = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row ReDim pw1(2 To lastr) ReDim pw2(2 To lastr) ReDim FN(2 To lastr) For x = 2 To lastr pw1(x) = Cells(x, "C") pw2(x) = Cells(x, "D") FN(x) = Cells(2, "A") & "\" & Cells(x, "B") Next x For x = 2 To lastr On Error GoTo Err_Chk Workbooks.Open FN(x), , , , pw1(x) ActiveWorkbook.SaveAs FN(x), , pw2(x) ActiveWorkbook.Close ActiveSheet.Cells(x, "E") = "성공" Retry: Next x Exit Sub Err_Chk: If Err.Number = 1004 Then Debug.Print Err.Description ActiveSheet.Cells(x, "E") = "실패:암호 맞지않음" GoTo Retry Else ActiveSheet.Cells(x, "E") = "실패" GoTo Retry End If End Sub | cs |
두 개의 프로시저는 개별적으로 실행하며, 쉬운 함수들로 구성되어있다. 더 간단하게 만들 수도 있겠으나 나는 여기까지 인듯...
'프로그램 > 비밀번호 관련 프로그램' 카테고리의 다른 글
[엑셀vba] 다량의 엑셀파일 한 번에 암호걸기(하위폴더 포함) (13) | 2021.06.23 |
---|---|
[엑셀vba] 엑셀 파일 암호 걸기(파일별로 다른 암호 설정) (10) | 2020.12.01 |
[엑셀vba] 엑셀 파일 선택하여 암호 설정하기 (6) | 2020.11.27 |
[엑셀vba] 엑셀 파일 별로 패스워드 다르게 적용하고 저장하기 (0) | 2020.11.24 |
[엑셀vba] 엑셀 파일 한꺼번에 암호걸기(23.01.13 수정) (8) | 2020.08.27 |