在数据验证代码中将范围指定为字符串

时间:2014-07-24 13:29:16

标签: string excel-vba range runtime-error validation

我遇到了一些问题,我正在努力从另一个单元格中的选择中指定数据验证集。例如,他们选择Thomas,并选择与“Thomas”对应的表格中的每个单元格作为另一个下拉列表的选择范围。

代码大多有效,但并不完全相同。最后一部分,With .Validation部分,会显示应用程序定义的错误。我怀疑它与rng是一个被视为字符串的范围有关,所以我尝试创建一个单独的字符串变量set作为rng的地址,但这也带来了一个错误。我也试过(如下所示),只是将rng的地址指定为数据验证公式本身,这也会导致错误。

我在这里做错了什么?

Sub ProcessSelector()

Dim lastrow As Long
Dim c As Range
Dim rng As Range

ActiveWorkbook.Worksheets(2).Select
With ActiveWorkbook.Worksheets(2)
    lastrow = .Cells(.Rows.Count, "E").End(xlUp).Row
    For Each c In .Range("E1:E" & lastrow)
       If c.Text = "Thomas" Then
            If rng Is Nothing Then
                Set rng = .Range("C" & c.Row)
            Else
                Set rng = Union(rng, .Range("C" & c.Row))
            End If
        End If
    Next c
End With
ActiveWorkbook.Worksheets(1).Select



With ActiveWorkbook.Sheets(1).Range("D5")
  With .Validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=" & rng.Address
  End With
End With
End Sub

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了答案!

它会第一次工作,并在每次之后给我一个错误。原因是我需要添加

在.Validation部分之后

“。删除”,以清除该单元格上预先存在的数据验证设置。

With ActiveWorkbook.Sheets(1).Range("D5").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=listProcesses"
End With