DataValidation List比较它是否相同?

时间:2019-05-13 22:57:07

标签: excel vba

我是VBA的新手,我想知道如何比较两个验证列表(如果它们具有相同的来源)以便实现所需的功能。 (请参阅屏幕截图以帮助您了解问题所在)

问题:例如,我有一个B列,当我将一个单元格从B列复制/粘贴到该列的另一行时,我想检查验证列表的来源是否与粘贴顺序相同更改为“如果相同则允许”或“如果不同则撤消错误”。

我不知道如何比较验证列表的点源,如果某人可以帮助我进行预言,我将无法很好地理解它。这是一个示例代码,我知道它可能会是类似的东西,但不知道该怎么做。

Dim Name As String
Name = target.Value
With Range("B" & target.Row)
    With .Validation                    
        .Modify xlValidateList, xlValidAlertStop, xlBetween, "=" & Name
    End With
End With

所有预期结果都在该屏幕截图中,以便更容易理解此处的重点:

https://prnt.sc/no5pi6

1 个答案:

答案 0 :(得分:0)

如果您有一个单元格(例如A1),并为其分配了列表类型的数据验证规则,则可以获取验证列表的地址或命名范围的相应名称,如下所示:

Sub checkValidation()

Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("Name of your Worksheet")
Debug.Print sht.Range("A1").Validation.Formula1

End Sub 

因此,例如,如果验证列表位于sht.Range("S1:S5")中,则可以在立即窗口中打印出来:

=$S$1:$S$5

如果验证列表是命名范围,例如ValidationList,则将得到:

=ValidationList

这些不只是字符串。

从这种意义上讲,您可以像这样比较两个单元格的验证列表:

Sub checkValidationSource()
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("Name of your Worksheet")
If sht.Range("A1").Validation.Formula1 = sht.Range("B1").Validation.Formula1 Then
'
'
'Do something
'
'
End If
End Sub