我想在excel的一列中找到第n个填充行,并且有一个公式可以在实际电子表格中进行测试时使用。但是我想使用.Evaluate()
将该值设置为宏中的变量。
我说了Dim firstRow As Long
,firstRow = 0
我说:
firstRow = ActiveWorksheet.Evaluate("SMALL(IF($K:$K<>"", ROW($K:$K) - ROW($K$1) + 1), 2)")
firstRow
仍设置为0。
如何获取等于公式计算值的变量?
我尝试在评估后添加.Select
,我尝试将firstRow更改为Variant
,但这些都不起作用。
答案 0 :(得分:2)
首先是ActiveSheet
,其次您需要将"
翻一番
firstRow = Activesheet.Evaluate("SMALL(IF($K:$K<>"""", ROW($K:$K) - ROW($K$1) + 1), 2)")
注意:
- ROW($K$1) + 1
。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