Worksheet 개체

Protect 메서드

노만e 2025. 3. 13. 05:06

엑셀 VBA에서 Protect 메서드는 특정 워크시트를 보호하여 변경을 제한하는 기능을 제공합니다.

즉, 사용자가 시트의 내용을 변경하거나, 특정 작업(셀 편집, 정렬, 필터 등)을 하지 못하도록 설정할 때 사용됩니다.


1. 기본 문법

Sheets("시트이름").Protect Password:="비밀번호", 옵션들...
  • Password → 시트 보호를 위한 비밀번호 (선택 사항)
  • DrawingObjects → 도형 보호 여부 (True = 보호, False = 보호 안 함)
  • Contents → 셀 보호 여부 (True = 보호, False = 보호 안 함)
  • Scenarios → 시나리오 보호 여부 (True = 보호, False = 보호 안 함)
  • UserInterfaceOnly → 사용자 인터페이스 보호 (True = VBA 코드에서는 변경 가능, 수동 편집 불가)

📌 기본적으로 Protect를 실행하면 모든 셀의 편집이 제한됨

📌 VBA 코드에서 작업할 수 있도록 UserInterfaceOnly:=True를 설정 가능

📌 보호된 시트를 해제하려면 Unprotect 메서드를 사용


2. 기본 시트 보호

Sub 시트보호()
Sheets("Sheet1").Protect Password:="1234"
End Sub

📌 "Sheet1"을 비밀번호 "1234"로 보호

📌 모든 셀이 편집 불가 상태가 됨


3. 비밀번호 없이 보호

Sub 비밀번호없이_보호()
Sheets("Sheet1").Protect
End Sub

📌 비밀번호 없이 시트를 보호 (사용자가 검토 → 시트 보호 해제에서 해제 가능)


4. 보호된 시트 해제 (Unprotect)

Sub 시트보호해제()
Sheets("Sheet1").Unprotect Password:="1234"
End Sub

📌 "Sheet1"의 보호를 비밀번호 "1234"로 해제

📌 비밀번호가 틀리면 오류 발생


5. 특정 작업만 허용하면서 시트 보호

Sub 특정작업_허용()
Sheets("Sheet1").Protect Password:="1234", AllowFiltering:=True, AllowSorting:=True, AllowUsingPivotTables:=True
End Sub

📌 시트 보호는 유지하되, 필터, 정렬, 피벗 테이블 사용을 허용


6. VBA 코드에서는 편집 가능하게 보호

Sub VBA편집가능_보호()
Sheets("Sheet1").Protect Password:="1234", UserInterfaceOnly:=True
End Sub

📌 사용자는 셀을 변경할 수 없지만, VBA 코드에서는 변경 가능


7. 선택한 셀만 편집 가능하게 보호

Sub 일부셀_편집가능()
Sheets("Sheet1").Unprotect "1234" ' 보호 해제
Range("A1:A10").Locked = False ' A1:A10은 편집 가능
Sheets("Sheet1").Protect "1234"
End Sub

📌 "Sheet1"을 보호하면서, A1:A10만 편집 가능하도록 설정


8. 전체 시트 보호

Sub 모든시트_보호()
Dim ws As Worksheet
For Each ws In Sheets
ws.Protect Password:="1234"
Next ws
End Sub

📌 워크북 내 모든 시트를 "1234" 비밀번호로 보호


9. 전체 시트 보호 해제

Sub 모든시트_보호해제()
Dim ws As Worksheet
For Each ws In Sheets
ws.Unprotect Password:="1234"
Next ws
End Sub

📌 워크북 내 모든 시트의 보호 해제


10. 셀 병합 허용하면서 보호

Sub 병합허용_보호()
Sheets("Sheet1").Protect Password:="1234", AllowFormattingCells:=True
End Sub

📌 사용자가 셀 서식 변경(병합, 글꼴 변경 등)을 할 수 있도록 허용


11. 비밀번호를 모르는 경우 보호 해제 시도 (Brute Force)

Sub 비밀번호찾기()
Dim i As Integer, j As Integer, k As Integer
Dim pw As String
On Error Resume Next

For i = 65 To 90 ' A-Z
For j = 65 To 90 ' A-Z
For k = 65 To 90 ' A-Z
pw = Chr(i) & Chr(j) & Chr(k)
Sheets("Sheet1").Unprotect Password:=pw
If Err.Number = 0 Then
MsgBox "비밀번호: " & pw
Exit Sub
End If
Err.Clear
Next k
Next j
Next i
MsgBox "비밀번호 찾기 실패"
End Sub

📌 3자리 영문 대문자로 된 비밀번호를 찾아서 보호 해제 시도 (보안상 위험)


12. 워크북 보호

Sub 워크북보호()
ThisWorkbook.Protect Password:="1234"
End Sub

📌 워크북 자체를 보호 (시트 추가/삭제/이동 제한)


13. 워크북 보호 해제

Sub 워크북보호해제()
ThisWorkbook.Unprotect Password:="1234"
End Sub

📌 워크북 보호 해제


14. 사용자가 보호 해제할 때 메시지 표시

Sub 보호설정_메시지()
Sheets("Sheet1").Protect Password:="1234"
MsgBox "Sheet1이 보호되었습니다. 변경하려면 비밀번호를 입력해야 합니다.", vbInformation
End Sub

📌 보호 설정 후 사용자에게 메시지 표시


15. 사용자 입력을 받아 보호 설정

Sub 사용자입력_보호설정()
Dim pw As String
pw = InputBox("설정할 비밀번호를 입력하세요:")

If pw <> "" Then
Sheets("Sheet1").Protect Password:=pw
MsgBox "Sheet1이 보호되었습니다."
Else
MsgBox "비밀번호가 입력되지 않았습니다.", vbExclamation
End If
End Sub

📌 사용자가 입력한 비밀번호로 시트 보호 설정


📝 정리

기능
VBA 코드
시트 보호
Sheets("Sheet1").Protect Password:="1234"
비밀번호 없이 보호
Sheets("Sheet1").Protect
시트 보호 해제
Sheets("Sheet1").Unprotect Password:="1234"
특정 작업 허용 후 보호
Protect Password:="1234", AllowFiltering:=True
VBA에서는 편집 가능하게 보호
Protect Password:="1234", UserInterfaceOnly:=True
선택한 셀만 편집 가능
Range("A1:A10").Locked = FalseProtect
모든 시트 보호
For Each ws In Sheets: ws.Protect Password:="1234": Next ws
모든 시트 보호 해제
For Each ws In Sheets: ws.Unprotect Password:="1234": Next ws
워크북 보호
ThisWorkbook.Protect Password:="1234"
워크북 보호 해제
ThisWorkbook.Unprotect Password:="1234"

🔥 VBA의 Protect를 활용하면 중요한 데이터를 보호하고, 특정 기능을 제한할 수 있습니다! 🚀