我是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
所有预期结果都在该屏幕截图中,以便更容易理解此处的重点:
答案 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