如何根据另一个单元格的值locking单元格并执行数据validation

我对VBA代码很陌生。 现在我被分配到一个任务来validationExcel表格中的数据。

例如在我的列A中 ,我有一个下拉菜单,使用户可以在“是”或“否”之间进行select。

  • 如果用户select“是”,则列B和列C中的单元格将被标记为“强制”,并且不能为空。 我想把这个validation错误。

    **Example 1: If A1 and A30 == YES** 
    • B1和C1,B30和C30是强制性的

    • 将颜色填充到强制单元格中,并在单元格已有值时移除填充颜色

    • 如果这些单元格是空白的,并且超出了所需的字符数,则会出现validation错误。

      例2:如果A99 == NO

    • B99将被locking,用户将不被允许在该单元上input数据。 可能我们可以将单元格值添加为“NA”以避免混淆

我能够使用数据validation和条件格式来捕获这个。 然而,我不能执行locking的function,因为根据研究,我需要一个VBA代码。

像这样的东西应该工作。

把它放到要应用它的工作表的代码模块中。

 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列中将locking设置为false,否则用户将无法在表单被locking时更改下拉值。