如何在VBA中无需传参获取自定义公式所在单元格的地址
VBA自定义函数获取自身所在单元格地址的实现方案
直接使用VBA内置的Application.Caller属性即可实现需求,该属性会返回触发自定义函数运行的对象,对于单元格内调用的自定义函数,返回值就是公式所在的单元格Range对象,无需额外传入单元格参数。
代码示例
Function GetMyCellInfo() As String ' 绑定自定义公式所在的单元格对象 Dim formulaCell As Range Set formulaCell = Application.Caller ' 提取行列信息返回,也可根据需要调整返回内容 GetMyCellInfo = "行号=" & formulaCell.Row & ",列号=" & formulaCell.Column End Function
使用方法:直接在任意单元格输入=GetMyCellInfo()即可返回对应单元格的行列信息,例如在B35单元格输入该公式,返回结果为行号=35,列号=2。
注意事项
- 不要和
ActiveCell混淆:ActiveCell仅指代当前光标选中的单元格,和公式所在单元格无关联,这也是你之前方案失效的原因。Application.Caller随函数调用位置动态绑定,完全不受光标位置影响。 - 可增加错误捕获兼容调试场景:如果直接在VBA编辑器中运行该函数,
Application.Caller会抛出错误,可增加错误处理逻辑,优化后的代码如下:
Function GetMyCellInfo() As String ' 错误捕获处理非单元格调用的场景 On Error Resume Next Dim formulaCell As Range Set formulaCell = Application.Caller If Err.Number <> 0 Then GetMyCellInfo = "请在单元格中调用该函数" Exit Function End If On Error GoTo 0 GetMyCellInfo = "行号=" & formulaCell.Row & ",列号=" & formulaCell.Column End Function
- 如果你需要直接获取单元格地址文本,可使用
formulaCell.Address获取绝对地址(如$B$35),使用formulaCell.Address(False, False)获取相对地址(如B35)。
内容的提问来源于stack exchange,提问作者ImFabien75
相关产品推荐
相关产品推荐

