如何使用VBA向单元格添加数据验证

时间:2014-04-09 08:14:55

标签: excel vba excel-vba

我想添加"数据验证"在使用VBA的单元格(可变)中,并且数据验证列表中的范围也是可变的。直到现在我一直在使用这个

这里"范围1"是数据验证列表中的范围和" rng"是我想要数据验证的单元格

Dim range1, rng As range
Set range1 = range("a1:a5")
Set rng = range("b1")
With rng
With .Validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="range1"
End With
End With

我得到"应用程序定义和对象定义错误"

也可以有人向我解释

中不同论点的含义
With .Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="range1"

1 个答案:

答案 0 :(得分:29)

使用这个:

Dim ws As Worksheet
Dim range1 As Range, rng As Range
'change Sheet1 to suit
Set ws = ThisWorkbook.Worksheets("Sheet1")

Set range1 = ws.Range("A1:A5")
Set rng = ws.Range("B1")

With rng.Validation
    .Delete 'delete previous validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range1.Address
End With

请注意,当您使用Dim range1, rng As range时,只有rng的{​​{1}}类型,Rangerange1。这就是我使用Variant的原因 关于您可以阅读的参数的含义是MSDN,但简而言之:

  • Dim range1 As Range, rng As Range表示验证类型,在这种情况下,您应该从列表中选择值
  • Type:=xlValidateList指定验证期间显示的消息框中使用的图标。如果用户从列表中输入任何值,他/她将收到错误消息。
  • 原始代码中的
  • AlertStyle:=xlValidAlertStop很奇怪。只有在提供两个公式进行验证时才能使用它。
  • Operator:= xlBetween用于列表数据验证,提供带有值的列表地址(格式为Formula1:="='" & ws.Name & "'!" & range1.Address