【问题标题】:Reset Data Validation Lists to first item, method range has failed将数据验证列表重置为第一项,方法范围失败
【发布时间】:2020-03-08 22:10:10
【问题描述】:

所以另一位用户建议了一种将一系列单元格重置为其各自数据验证列表第一项的方法(如 this screenshot 中突出显示的那样,他和 this other user 建议了相同的解决方案,但我不断收到运行时错误“方法” Range' has failed" 在以下行:
Cell.Value = Range(Split(Mid(Cell.Validation.Formula1, 2), ":")(0)).Value

my actual worksheet 如果需要。

我被卡住了,我们将不胜感激。

【问题讨论】:

  • 您的公式采用Cell.Validation.Formula1(您可以 Debug.Print 到立即窗口查看)。其中它删除了第一个字符:Mid(Cell.Validation.Formula1, 2)。之后剩下的(在即时窗口中查看)在“:”上拆分,第一个元素(索引 0)作为范围名称返回,然后用于指定要返回的范围值。这也可以打印。以这种方式检查公式的输出后,您就会知道它有什么问题。
  • 谢谢,很高兴知道(Cell.Validation.Formula1 是我的数据验证列表“=Talents!$H$4:$H$9”的来源

标签: excel vba


【解决方案1】:

以下是您的问题的三个解决方案。它们的不同之处在于数据验证中的列表是如何定义的。

Private Sub Test()

    Dim Cell As Range

    ' Cell contains a comma separated list
    Set Cell = Cells(2, 2)
    Cell.Value = Split(Cell.Validation.Formula1, ",")(0)

    ' Cell contains a reference to a named range
    ' but should also work for a worksheet reference
    Set Cell = Cells(4, 2)
    Cell.Value = Range(Mid(Cell.Validation.Formula1, 2)).Cells(1).Value

    ' cell contains a reference to a range
    Set Cell = Cells(6, 2)
    Cell.Value = Range(Split(Mid(Cell.Validation.Formula1, 2), ":")(0)).Value
End Sub

【讨论】:

  • 感谢您的回答,拆分功能似乎是问题所在。 mid 函数返回 Talents!$H$4:$H$9 但 Split("Talents!$H$4:$H$9", ":")(0) 不返回任何内容......即使 Talents!$H$4 包含值“0/5”是正确的。
  • 好的,最终对我有用的是 Cell.Value = Split(Cell.Validation.Formula1, ":")(0) 感谢您的帮助
  • 如果 Split(Cell.Validation.Formula1, ":") 有效,则验证列表定义 (Formula1) 中不应有等号,这会使下拉菜单无法操作。从这里开始,您似乎就快到了,几乎要离开“试试这个”阶段,并通过了解公式的工作原理来掌握公式。再给它一轮。 :-)
猜你喜欢
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2021-09-02
  • 2018-09-16
相关资源
最近更新 更多