如何使用VBA将数据validation添加到单元格

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

这里“range1”是数据validation列表中的范围,“rng”是我要validation数据的单元格

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" 

使用这个:

 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具有rngtypes,但range1Variant 。 这就是为什么我使用Dim range1 As Range, rng As Range
关于您可以阅读的参数的含义是MSDN ,但简而言之:

  • Type:=xlValidateList表示validationtypes,在这种情况下,您应该从列表中select值
  • AlertStyle:=xlValidAlertStop指定validation期间显示的消息框中使用的图标。 如果用户input任何值,他/她会得到错误信息。
  • 在你原来的代码中, Operator:= xlBetween是奇数。 只有在提供了两个validation公式的情况下才能使用它。
  • Formula1:="='" & ws.Name & "'!" & range1.Address Formula1:="='" & ws.Name & "'!" & range1.Address .列表数据validation的地址提供了包含值的列表地址(格式=Sheet!A1:A5