이와 비슷한 것이 작동해야합니다.
적용 할 시트의 코드 모듈에 넣으십시오.
Private Sub worksheet_change(ByVal target As Range)
''''' CHECK IF THE CHANGED CELL IS IN RANGE A1:A99 (OR ANY OTHER RANGE YOU DEFINE)
If Not Intersect(target, Range("A1:A99")) Is Nothing Then
''''' UNPROTECT THE SHEET
ActiveSheet.Unprotect
''''' IF THE CELL CHANGED IS NOW 'YES'
If target = "Yes" Then
''''' WE DEFINE HOW MANY COLUMNS TO MOVE ACROSS FROM THE CELL THAT CHANGED AND DO THE ACTIONS IN THE CODE BELOW
''''' SO IN THIS EXAMPLE WE'RE MOVING ACROSS 1 CELL TO B1 AND THEN 2 CELLS TO C1
''''' SO TO GET TO AA1 AND AB2 WE'D DO i = 26 to 27
''''' IF WE WANTED TO ACCESS AA1 ALL THE WAY THROUGH TO AZ1 WE'D DO i = 26 to 51
For i = 1 To 2
''''' MOVE ACROSS i NUMBER OF CELLS FROM THE CELL THAT CHANGED
With target.Offset(0, i)
''''' UNLOCK THE CELL
.Locked = False
'''''SET THE CONDITIONAL FORMATTING
.FormatConditions.Add Type:=xlExpression, Formula1:="=ISBLANK(" & target.Offset(0, i).Address & ")"
With .FormatConditions(.FormatConditions.Count)
.SetFirstPriority
.Interior.ColorIndex = 37
End With
End With
''''' INCREASE i BY 1 AND LOOP TO AFFECT THE NEXT CELL
Next i
''''' IF THE CELL CHANGED IS NOW 'NO'
ElseIf target = "No" Then
''''' WE DEFINE HOW MANY COLUMNS TO MOVE ACROSS FROM THE CELL THAT CHANGED AND DO THE ACTIONS IN THE CODE BELOW
For i = 1 To 2
''''' MOVE ACROSS i NUMBER OF CELLS FROM THE CELL THAT CHANGED
With target.Offset(0, i)
''''' SET THE CELL VALUE TO BLANK
.Value = ""
''''' LOCK THE CELL
.Locked = True
''''' REMOVE THE CONDITIONAL FORMATTING
.FormatConditions.Delete
''''' ADD NEW CONDITIONAL FORMATTING HERE IF REQUIRED
End With
''''' INCREASE i BY 1 AND LOOP TO AFFECT THE NEXT CELL
Next i
End If
'''''PROTECT THE SHEET
ActiveSheet.Protect
End If
End Sub
은 목록 드롭 다운이 나 사용자가 시트가 잠겨있는 동안 값 드롭 다운을 변경할 수 없습니다를 A 열에서 false로 고정 설정해야합니다.
나는 당신이 검증 과정에서 논리를 통해 할 수있을 것이라고 생각합니다. –
당신이 이것을 찾을 수 있습니다 [질문 도움] (http://stackoverflow.com/questions/3037400/how-to-lock-the -data-in-a-cell-in-excel-using-vba)을 사용합니다. TL :'ActiveSheet.Protect'는 워크 시트를 잠글 것입니다. Range ("A1 : D5"). Locked = False는 expcetions를 잠금으로 설정합니다. 마지막으로'ActiveSheet.Unprotect'는 읽기/쓰기 접근을 복구합니다. –