【发布时间】:2021-11-02 12:32:42
【问题描述】:
作为学习练习和未来代码中的可能用途,我创建了我的第一个 Excel VBA 函数来返回任何 Excel 表格(而不是工作表本身)中的活动单元格行号。本质上,它只是在工作表中找到活动行,然后找到表格标题的行号,然后从单元格行号中减去该行号以返回表格的行号,然后可以在后续代码中使用该行号。但是,虽然它可以工作,但它看起来并不是最有效的。有人可以改进它吗?
Sub TableRow()
Dim LORow As Integer
Dim TbleCell As Range
Set TbleCell = Activecell
Call FuncTableRow(TbleCell, LORow)
MsgBox LORow
End Sub
Public Function FuncTableRow(ByRef TbleCell As Range, LORow As Integer) As Range
Dim LOName As String
Dim LOHeaderRow, Row As Integer
LOName = Activecell.ListObject.Name
Row = Activecell.Row
LOHeaderRow = ActiveSheet.ListObjects(LOName).HeaderRowRange.Row
LORow = Row - LOHeaderRow
Debug.Print (LORow)
End Function
【问题讨论】:
-
似乎有点迂回使用
Activecell.ListObject来获取表名,这样你就可以使用它来获取表对象,而那是你已经引用过的...... -
真的你只需要:
TbleCell.Row - TbleCell.Listobject.HeaderRowRange.Row和适当的错误处理程序。