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

Gaj*_*jju 21 excel vba excel-vba

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

这里"range1"是数据验证列表中的范围,"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
Run Code Online (Sandbox Code Playgroud)

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

也有人可以解释我的不同论点的含义

With .Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="range1"
Run Code Online (Sandbox Code Playgroud)

Dmi*_*liv 33

使用这个:

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
Run Code Online (Sandbox Code Playgroud)

请注意,当你使用Dim range1, rng As range,只能rng有一个类型Range,但是range1Variant.这就是我使用的原因Dim range1 As Range, rng As Range.
关于您可以阅读的参数的含义是MSDN,但简而言之:

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

  • @ Gajju,不用担心,这很容易:)让我们开始吧!期望的结果是这样的:`Formula1:="='Sheet1'!A1:A5"` - excel中的所有公式都从等号开始:`=`.接下来,`'Sheet1'!`表示范围'A1:A5`属于工作表`Sheet1`(如果你的工作表名称_doesn't_包含空格,你可以忽略叹息''`这样:Formula1:="= Sheet1! A1:A5".但是我们不想硬编码这个公式,所以我们使用:`Formula1:="='"&ws.Name&"'!"&range1.Address`其中`ws.Name`返回表name(例如"Sheet1")和`range1.Address`返回`A1:A5`. (4认同)
  • 这个很好的答案的快速补充:如果您想添加一个不是单元格范围的值列表,您必须指定一个逗号分隔值列表作为“Formula1”参数。例如,如果要将单元格的内容限制为包含字母 A、B 或 C 之一,则要使用的代码是`Formula1:="A,B,C"` (2认同)