vba - 如何使用 VBA 将数据验证添加到单元格

标签 vba excel

我想使用 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/

相关文章:

java - 使用 Apache POI 获取单元格颜色

java - 在excel文件中导出Jtable

vba - Excel 宏提供输入框,创建新工作表,将数据从原始工作表复制到新工作表

ms-access - 动态调整报表详细信息区域的大小

vba - Excel VBA 中的 Outlook 电子邮件和签名 - .Body 与 .HTMLbody

C#技巧——通过字符串获取常量值

excel - 尝试在事件工作簿中引用另一个工作表

vba - 保存工作簿副本时,工作表变为取消隐藏

vba - 粘贴到另一个工作表的下一行

c# - 如何遍历 Excel 工作表仅从特定列中提取数据