셀을 보호하면서도 사용자가 드롭다운 목록에서 옵션을 선택할 수 있도록 허용하고 싶습니다.
답변을 제공하지 않는 아래 질문을 읽었습니다.
셀 보호를 해제하는 것은 제가 원하는 작업이 아닙니다. 사용자가 단순히 셀 위에 붙여넣기만 하면 데이터 유효성 검사가 사라지기 때문입니다.
CELL을 잠그고 시트 보호 기능을 설정했지만 여전히 데이터 유효성 검사 목록 옵션을 선택할 수 있는 방법이 있습니까?
VBA를 포함한 모든 옵션을 시도해 보겠습니다.
답변1
더 좋은 방법이 있을 수도 있지만 아이디어가 있었고 지금까지의 테스트에서는 제대로 작동하는 것 같습니다.
그래서 나는 Worksheet_SelectionChange
사용자가 목록으로 무엇을 하고 있는지 모니터링하는 데 사용합니다.
셀이 선택되면 시트의 잠금이 해제되고 다른 항목이 선택되면 다시 잠깁니다.
내 목록은 N26에 있습니다.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("N26")) Is Nothing Then
ActiveSheet.Unprotect
Else
ActiveSheet.Protect
End If
End Sub
이것의 문제는 분명히 셀을 선택한 다음 무엇이든 붙여넣을 수 있어야 한다는 것입니다.
따라서 사용자가 무언가를 붙여넣고 있는지 확인해야 하며 여기서 흥미로운 내용을 발견했습니다.https://stackoverflow.com/questions/27818152/excel-vba-how-to-Detect-if-something-was-pasted-in-a-worksheet
이를 통해 붙여넣은 내용이 있는지 확인하고 실행 취소할 수 있습니다.
나는 그것들을 모아 수정했고, 그래서 사용자는 잠금 해제된 셀에 붙여넣을 수 있지만 N26
.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("N26")) Is Nothing Then 'Data validation list adress
ActiveSheet.Unprotect
Else
ActiveSheet.Protect
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("N26")) Is Nothing Then
Dim UndoList As String
'~~> Get the undo List to capture the last action performed by user
UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)
'~~> Check if the last action was not a paste nor an autofill
If Left(UndoList, 5) = "Paste" Then
With Application
.EnableEvents = False
.Undo 'Undo paste
.EnableEvents = True
End With
End If
End If
End Sub
영어 버전의 Excel을 사용하지 않는 경우 이러한 값 중 일부가 변경될 수 있습니다. 나는 내 언어로 "&Undo"
바뀌어야 했습니다 .(UndoList, 5) = "Paste"
다음 질문에도 이 내용을 사용할 수 있을 것 같습니다. 붙여넣기를 다시 허용한 다음 붙여넣기에 대한 모든 변경 사항을 확인하고, true인 경우 IsNumeric(Target.value)
확인을 실행하고 실패하면 실행 취소하세요.