MS Excel:检索VBA函数所在的行号

MS Excel:检索VBA函数所在的行号,excel,vba,user-defined-functions,row-number,Excel,Vba,User Defined Functions,Row Number,我希望我是在正确的论坛上问这个问题: 我正在用VBA为MS Excel编写自定义项;它基本上为该行上的事务构建一条状态消息。它逐步执行一系列IF语句,计算该行不同列中的单元格值 但是,此UDF将驻留在多行中。因此,它可能在C12、C13、C14等中。UDF如何知道使用哪一行?我正在尝试这样的事情,但没有效果 Tmp_Row = Application.Evaluate("Row()") 它似乎返回空值 我错过了什么 提前感谢所有人。调用方应用程序。很少使用调用方,但当UDF

我希望我是在正确的论坛上问这个问题:

我正在用VBA为MS Excel编写自定义项;它基本上为该行上的事务构建一条状态消息。它逐步执行一系列IF语句,计算该行不同列中的单元格值

但是,此UDF将驻留在多行中。因此,它可能在C12、C13、C14等中。UDF如何知道使用哪一行?我正在尝试这样的事情,但没有效果

Tmp_Row = Application.Evaluate("Row()")
它似乎返回空值

我错过了什么


提前感谢所有人。调用方

应用程序。很少使用调用方
,但当UDF需要知道是谁调用它时,它需要知道关于
应用程序。调用方

除此之外,您不能假设函数是从
范围调用的。因此,应使用
TypeOf…Is
运算符验证其类型:

Dim CallingCell As Excel.Range
If TypeOf Application.Caller Is Excel.Range Then
    'Caller is a range, so this assignment is safe:
    Set CallingCell = Application.Caller
End If

If CallingCell Is Nothing Then
    'function wasn't called from a cell, now what?
Else
    'working row is CallingCell.Row
End If
建议:使函数将其依赖单元格作为
范围
参数(如果需要
范围
元数据;如果只需要值,则将
双参数
日期
字符串
参数)而不是从工作表中获取值。这将使工作表布局与函数的逻辑分离,从而使其更灵活、更易于使用,并且在工作表布局更改时不需要进行任何调整。

Application.ThisCell 作为范围对象返回从中调用用户定义函数的单元格

您可以使用以下代码对其进行测试:

Function testTC()
    testTC = Application.ThisCell.Row
End Function
Excel
中使用以下公式

   =testTC() 

(剪切)复制/粘贴到各个单元格。

Application.ThisCell.Row
?听起来像是XY的问题。最好将所有相关范围作为参数传递给UDF。请尝试Application.Caller.RowSo,这里不应该说“谢谢”,但我不知道正确的位置。谢谢。在从0到1的范围内,您的建议=“1”ThanksAgain,这里不应该说谢谢,但要感谢您的努力/解决方案。