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를 통한 사용자 입력으로부터 워크시트를 보호할 수 있습니다.
워크북을 닫았다가 다시 열면 이 설정이 손실됩니다.워크시트 보호는 계속 유지됩니다.
따라서 워크북을 열 때 워크시트를 수정하거나 한 번만 실행할 수 있는 절차의 시작 부분에 '재보호' 코드를 포함해야 합니다.
기본이지만 이해하기 쉬운 답변:
Sub Example()
ActiveSheet.Unprotect
Program logic...
ActiveSheet.Protect
End Sub
시트의 어느 부분도 VBA만으로 편집할 수 있도록 설정할 수 없다고 생각합니다. 그러나 기본적으로 동일한 효과를 가진 작업을 수행할 수 있습니다. 변경하기 전에 VBA에서 워크시트를 보호할 수 있습니다.
wksht.Unprotect()
작업이 끝나면 다시 보호합니다.
wksht.Protect()
편집: 이 회피책으로 Dheer의 당면한 문제를 해결할 수 있을 것 같습니다만, 나중에 이 질문/답변을 접하게 되면 Joe가 지적한 것처럼 제 답변의 첫 부분은 틀렸습니다.시트를 VBA만으로 편집할 수 있도록 보호할 수 있지만 "UserInterfaceOnly" 옵션은 "워크시트"를 호출할 때만 설정할 수 있는 것으로 보입니다.보호" 코드입니다.
이 문제를 해결하려면 변경된 값을 유지하는 숨겨진 워크시트를 생성할 수 있습니다.표시된 보호된 워크시트의 셀에는 숨겨진 워크시트의 값이 간단한 공식을 사용하여 표시되어야 합니다.
숨겨진 워크시트를 통해 표시된 값을 변경할 수 있지만 사용자는 편집할 수 없습니다.
sheet1에서 잠그고 싶은 셀을 선택하고 open_workbook() 함수에 제안 코드를 넣어 마법처럼 작동했습니다.
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
'programing' 카테고리의 다른 글
| 언와인드 세그를 프로그래밍 방식으로 실행하는 방법 (0) | 2023.04.14 |
|---|---|
| WPF에서의 WndProc 메시지 처리 방법 (0) | 2023.04.14 |
| WPF에서 콤보박스 컨트롤에 열거형을 바인드하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
| HSSF(Apache POI)를 사용하여 기존 Excel에서 두 줄 사이에 행을 삽입하는 방법 (0) | 2023.04.09 |
| 소수점을 2배로 하는 문자열을 해석하려면 어떻게 해야 하나요? (0) | 2023.04.09 |