【问题标题】:Designating a range as a string in data validation code在数据验证代码中将范围指定为字符串
【发布时间】:2014-09-16 02:12:56
【问题描述】:

我正在处理的一些代码存在问题,用于从另一个单元格中的选择中指定数据验证集。例如,他们选择 Thomas,表格中与“Thomas”相对应的每个单元格都被选为另一个下拉列表的选择范围。

代码大部分都有效,但并没有完全融合在一起。最后一部分,With .Validation 部分,提出了一个应用程序定义的错误。我怀疑它与 rng 是一个被视为字符串的范围有关,所以我尝试创建一个单独的字符串变量集作为 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

谢谢!

【问题讨论】:

    标签: excel vba string validation range


    【解决方案1】:

    我找到了答案!

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

    .Validation 部分后的“.Delete”,以清除该单元格上预先存在的数据验证设置。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 2015-02-26
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多