문제

나는 사용자 입력을 위해 특정 필드가 허용되고 다른 셀을 보호 해야하는 Excel을 사용하고 있습니다. 도구 보호 시트를 사용했지만이 작업을 수행 한 후에는 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

해결 방법으로, 당신은 a를 만들 수 있습니다 숨겨진 워크 시트, 변경된 값을 보유 할 것입니다. 가시적이고 보호 된 워크 시트의 셀은 간단한 공식을 사용하여 숨겨진 워크 시트의 값을 표시해야합니다.

너는 할 수있을 것이다 숨겨진 워크 시트를 통해 표시된 값을 변경하십시오, 사용자는 사용자가 편집 할 수 없습니다.

Sheet1에 고정 된 셀을 선택하고 제안 된 코드를 Open_Workbook () 함수에 배치하고 매력처럼 작동했습니다.

ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
UserInterfaceOnly:=True
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top