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
'IT TIP' 카테고리의 다른 글
Ubuntu Docker 이미지 내에서 wget을 실행하는 방법은 무엇입니까? (0) | 2020.12.11 |
---|---|
Angular2에서 여러 경로 매개 변수 전달 (0) | 2020.12.11 |
디버그 에이전트 없이는 NullPointerException 스택 추적을 사용할 수 없습니다. (0) | 2020.12.11 |
무료 DTD에서 XSD 로의 변환 유틸리티? (0) | 2020.12.11 |
특히 Fugitive의 경우 vim에서 vimdiff 모드를 어떻게 종료합니까? (0) | 2020.12.11 |