我想使用 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
我收到“应用程序定义和对象定义错误”
有人可以向我解释一下不同参数的含义
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
的类型为 Range
,但 range1
是变体
。这就是为什么我使用 Dim range1 As Range, rng As Range
。
关于参数的含义,您可以阅读MSDN ,但简而言之:
Type:=xlValidateList
表示验证类型,在这种情况下您应该从列表中选择值AlertStyle:=xlValidAlertStop
指定验证期间显示的消息框中使用的图标。如果用户输入列表之外的任何值,他/她将收到错误消息。- 在您的原始代码中,
Operator:= xlBetween
是奇怪的。仅当提供两个公式进行验证时才可以使用。 Formula1:="='"& ws.Name & "'!"& range1.Address
用于列表数据验证,提供包含值的列表地址(格式为=Sheet!A1:A5
)
关于vba - 如何使用 VBA 将数据验证添加到单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956604/