如何使用.Evaluate()设置变量

时间:2019-05-22 17:46:20

标签: excel vba

我想在excel的一列中找到第n个填充行,并且有一个公式可以在实际电子表格中进行测试时使用。但是我想使用.Evaluate()将该值设置为宏中的变量。

我说了Dim firstRow As LongfirstRow = 0

我说:

firstRow = ActiveWorksheet.Evaluate("SMALL(IF($K:$K<>"", ROW($K:$K) - ROW($K$1) + 1), 2)")

firstRow仍设置为0。

如何获取等于公式计算值的变量?

我尝试在评估后添加.Select,我尝试将firstRow更改为Variant,但这些都不起作用。

2 个答案:

答案 0 :(得分:2)

首先是ActiveSheet,其次您需要将"翻一番

firstRow = Activesheet.Evaluate("SMALL(IF($K:$K<>"""", ROW($K:$K) - ROW($K$1) + 1), 2)")

注意:

  1. 完整列引用不需要- ROW($K$1) + 1
  2. 除非绝对需要,否则请勿使用On Error Resume Next。然后尽快使用On Error Goto 0重新打开错误捕获功能以捕获错误,以便对其进行处理。

答案 1 :(得分:2)

通常来说,对整个列引用使用Evaluate方法非常麻烦。我知道使用单行代码通常很诱人,但这通常只会降低性能。为了完成相同的任务,我建议改用Range.Find方法,这样不易出错:

Sub RangeFindMethod()

    Dim rFind As Range
    Dim firstRow As Long

    With ActiveSheet.Columns("K")
        Set rFind = .Find("*", .Cells(.Cells.Count), xlValues, xlWhole, , xlNext)
        If Not rFind Is Nothing Then
            Set rFind = .FindNext(rFind)
            firstRow = rFind.Row
        Else
            firstRow = 1
        End If
    End With

    MsgBox firstRow

End Sub