IT TIP

Excel에서 셀을 보호하지만 VBA 스크립트로 수정 가능

itqueen 2020. 12. 11. 21:08
반응형

Excel에서 셀을 보호하지만 VBA 스크립트로 수정 가능


사용자 입력에 특정 필드가 허용되고 다른 셀이 보호되는 Excel을 사용하고 있습니다. Tools Protect 시트를 사용했지만이 작업을 수행 한 후 VBA 스크립트의 값을 변경할 수 없습니다. 사용자 입력을 중지하는 동시에 VBA 코드가 특정 계산을 기반으로 셀 값을 변경할 수 있도록 시트를 제한해야합니다.


사용해보십시오

Worksheet.Protect "Password", UserInterfaceOnly := True

UserInterfaceOnly 매개 변수가 true로 설정된 경우 VBA 코드는 보호 된 셀을 수정할 수 있습니다.


다음 작업을 수행하여 코드를 통해 시트를 수정할 수 있습니다.

  • 보호 해제
  • 수정
  • 보호

코드에서 이것은 다음과 같습니다.

Sub UnProtect_Modify_Protect()

  ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password"
'Unprotect

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

  ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password"
'Protect

End Sub

이 방법 약점 은 코드가 중단되고 오류 처리로 캡처되지 않으면 워크 시트가 보호되지 않은 상태로 남을 수 있다는 것입니다.

이러한 조치를 취하면 코드를 개선 할 수 있습니다.

  • 다시 보호
  • 수정

이를 수행하는 코드는 다음과 같습니다.

Sub Re-Protect_Modify()

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
 UserInterfaceOnly:=True
'Protect, even if already protected

  ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify

End Sub

이 코드는 워크 시트의 보호를 갱신하지만 'UserInterfaceOnly'가 true로 설정됩니다. 이를 통해 VBA 코드는 워크 시트를 수정할 수 있으며 실행이 중단 된 경우에도 UI를 통한 사용자 입력으로부터 워크 시트를 보호 할 수 있습니다.

이 설정은 통합 문서를 닫았다가 다시 열면 손실 됩니다. 워크 시트 보호는 계속 유지됩니다.

따라서 워크 시트 수정을 시도하는 모든 절차의 시작 부분에 '재 보호'코드를 포함해야하거나 통합 문서를 열 때 한 번만 실행할 수 있습니다.


시트의 어떤 부분도 VBA로만 편집 가능하도록 설정할 수 있다고 생각하지 않지만 기본적으로 동일한 효과가있는 작업을 수행 할 수 있습니다. 변경하기 전에 VBA에서 워크 시트를 보호 해제 할 수 있습니다.

wksht.Unprotect()

완료되면 다시 보호하십시오.

wksht.Protect()

편집 :이 해결 방법으로 Dheer의 즉각적인 문제가 해결되었을 수 있지만 나중에이 질문 / 답변을 접하는 사람에게는 Joe가 아래에서 지적한 것처럼 내 답변의 첫 번째 부분에 대해 잘못되었습니다. 당신은 수있는 시트가 VBA 전용으로 편집 할 수 보호,하지만 코드에서 "Worksheet.Protect"를 호출 할 때 그것은 "UserInterfaceOnly"옵션 만 설정할 수 있습니다 나타납니다.


기본적이지만 이해하기 쉬운 대답 :

Sub Example()
    ActiveSheet.Unprotect
    Program logic...
    ActiveSheet.Protect
End Sub

As a workaround, you can create a hidden worksheet, which would hold the changed value. The cell on the visible, protected worksheet should display the value from the hidden worksheet using a simple formula.

You will be able to change the displayed value through the hidden worksheet, while your users won't be able to edit it.


I selected the cells I wanted locked out in sheet1 and place the suggested code in the open_workbook() function and worked like a charm.

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
UserInterfaceOnly:=True

참고URL : https://stackoverflow.com/questions/125449/protecting-cells-in-excel-but-allow-these-to-be-modified-by-vba-script

반응형