programing

Excel의 셀을 보호하지만 VBA 스크립트에 의해 셀을 수정할 수 있습니다.

javajsp 2023. 4. 14. 21:11

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