使用动态数据验证*擦除单元格而不使用* VBA

时间:2016-08-19 12:17:53

标签: excel validation excel-formula

我被要求"修复"一个电子表格,其中包含两个带数据验证的交互列;一," Cargo Class",从包含自动 HighHeavy Breakbulk 的列表进行验证,以及一个& #34;货物段",由INDIRECT函数确定的三个列表之一进行验证。

最初一切正常,但如果用户根据选定的货物类别选择货物分段然后更改货物类别,则最终会出现无效的分段和类别组合。

我最初通过添加Worksheet.Change事件来修复此问题,如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Row > 21 Then
    Cells(Target.Row, Target.Column + 1).ClearContents
Else
    Exit Sub
End If
End Sub

这很好,如果用户记得启用宏。如果他们没有,当然,它没有任何区别。

然后我查看了几个不同的解决方案,最明显的是https://www.ablebits.com/office-addins-blog/2014/09/30/dependent-cascading-dropdown-lists-excel/#prevent-changes-primary-dropdown处阻止更改的解决方案,但显然这会让人们更加困惑,而不是要求他们启用内容。

有什么方法可以在更改货物类别时使用公式或数据验证来清除货物分段,而不使用VBA并且完全不锁定货物类别?

1 个答案:

答案 0 :(得分:0)

以@pnuts为基础'想法,我保留了自动清除VBA脚本,但添加了一些条件以突出显示红色的无效组合,使用此规则:

=OR(AND(COUNTIF(Auto, $E22), NOT($D22="Auto")), AND(COUNTIF(HighHeavy, $E22), NOT($D22="HighHeavy")), AND(COUNTIF(Breakbulk, $E22), NOT($D22="Breakbulk")))

...其中AutoHighHeavyBreakbulk是用于填充列E的货物段的列表,而列D包含货物类。

现在,如果启用了宏,则如果选择了无效的类,则段字段将被清空,如果未启用宏,则会以相当不可接受的方式标记错误的组合。谢谢,伙计们!