VBA限定词无效错误

时间:2018-07-26 08:18:04

标签: excel vba excel-vba excel-formula

不确定为什么会收到无效的预选赛错误?只需在一个数字范围内寻找最小负值,然后选择(请注意,每个单元格中的ea号是公式的结果)

Sub Test()
    Dim c As Double
    c = .Find(What:=ActiveSheet.Evaluate("=LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)"), LookIn:=xlValues)
            If c <> 0 Then
            c.Select
            End If
 End Sub

基于到目前为止的评论,代码现在如下

Sub Test()
Dim c As Variant, a As Variant
    c = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
    Debug.Print c
    a = Application.Match(-0.199999999999818, "V17:V57", 0)
    'a = Application.Match(c, ActiveSheet.Range("V17:V57"))
    If IsError(a) Then Exit Sub
    Debug.Print ActiveSheet.Range("V17:V57").Cells(a, 1).Address
End Sub

2 个答案:

答案 0 :(得分:1)

.Find是Range对象的一种方法。

您需要传递一个范围对象。

常规格式为:

Option Explicit
Sub Test()
    Dim c As Range
    Set c = ActiveSheet.Range("V17:V57").Find(What:="letter", LookIn:=xlValues)
    If Not c Is Nothing Then
        c.Select
    End If
End Sub

请注意,c是一个范围对象,是.Find方法返回的对象。 ActiveSheet.Range("V17:V57")中的示例搜索范围。

您测试是否通过Is Nothing找到了一个值,就像找不到该值一样,范围对象c将被设置为空。

如果=LARGE(V17:V57,COUNTIF(V17:V57,">0")+1)公式产生的错误值是Evaluate,那么您需要处理一个可能的错误值。否则,您将得到一个错误。

例如:

Option Explicit
Sub Test()
    Dim c As Range, a As Variant
    a = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
    If IsError(a) Then Exit Sub
    Set c = ActiveSheet.Range("V17:V57").Find(What:= a, LookIn:=xlValues)
    If Not c Is Nothing Then
        c.Select
    End If
End Sub

请确保将列的格式设置为显示小数位,以便“查找”可以准确匹配。

请参阅讨论here


如果您无法格式化工作表以显示所需的小数位数,请尝试使用“匹配”。抱歉,我在下面有c和另一个。

Option Explicit
Sub Test()
    Dim c As Variant, a As Variant
    c = ActiveSheet.Evaluate("LARGE(V17:V57,COUNTIF(V17:V57,"">0"")+1)")
    a = Application.Match(c, ActiveSheet.Range("V17:V57"))
    If IsError(a) Then Exit Sub
    Debug.Print ActiveSheet.Range("V17:V57").Cells(a, 1).Address
End Sub

答案 1 :(得分:0)

要使用整个工作表范围,请尝试此操作。

ValueError: The number of passed axes must be 3, the same as the output plot