excel - 查找 Activecell 表行的 VBA 函数

标签 excel vba numbers row

作为学习练习和 future 代码中的可能用途,我创建了我的第一个 Excel VBA 函数来返回任何 Excel 表格(而不是工作表本身)中的 activecell 行号。本质上,它只是在工作表中找到事件行,然后找到表格标题的行号,然后从单元格行号中减去该行号以返回表格的行号,然后可以在后续代码中使用该行号。但是,虽然它有效,但它看起来并不是最有效的 任何人都可以改进它吗?

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

最佳答案

这个问题可能会因为不够具体而被关闭,但最明显的项目(对我而言)是您对自定义函数的使用。您的函数实际上并没有返回任何内容,它只是运行调试打印。要让您的函数实际返回行号,您可以将其设置为类型 Long ( not integer ) 并包含函数名 =到号码。
我实际上并没有测试您的功能,但假设 LORow 正在重复打印正确的答案,那么它应该像这样工作:

Public Function FuncTableRow(ByRef TbleCell As Range, LORow As Integer) As Long
    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)
    FuncTableRow = LORow
End Function
  • 你也不Call一个函数,您可以将其作为自身插入子例程中。
  • 您正在使用 LORow作为输入变量,然后更改它。这通常是一种不好的做法。
  • 你不应该使用 ActiveSheetTbleCell.Worksheet 获取工作表
  • 您几乎永远不会将 activecell 用作自定义公式的一部分。
  • Dim LOHeaderRow, Row As Integer实际上应该是 Dim LOHeaderRow as Long, Row As Long .正如您目前拥有的 LOHeaderRow未定义/变体。

  • 可能还有更多。我将通过更简单的任务重新启动您的流程,即返回工作表中最后使用的单元格。有十几种方法可以做到这一点,还有很多帮助示例。

    关于excel - 查找 Activecell 表行的 VBA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69810515/

    相关文章:

    javascript - 在 JavaScript 中使用超限序数

    mysql - 从包含超过 300 列的 csv、txt 或 xls 文件创建 MySQL 表

    excel - 将过滤列复制到另一列但索引相同

    matlab - 如何使用Excel VBA通​​过matlab在Excel中制作页眉和页脚

    vba - 在一个子程序中设置变量并在另一个子程序中使用

    javascript - React.js 生成新的随机数

    java - 将长值放入 JSONArray

    excel - 如何在数字到文本转换中保留尾随零?

    VBA 搜索值并更改第 2 行的格式

    r - 基于 R 或 Excel 中的水平对创建新向量