Excel VBA 在给定范围的情况下使用表格内的单元格

Posted

技术标签:

【中文标题】Excel VBA 在给定范围的情况下使用表格内的单元格【英文标题】:Excel VBA working with cell inside a table given its range 【发布时间】:2017-02-27 00:21:45 【问题描述】:

我刚刚开始使用 VBA 进行实习,我目前的项目遇到了一个小问题。我确信这是一个我没有看到的直截了当的解决方案,因为没有任何在线解决方案。

我的工作表采用列表对象行中的几个输入值,并将相关值从映射返回到同一行中的其他列。

我希望它只为用户更改的行运行 FindBankInfo 子

If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
'rowCount in the sub is used as lo.listrow(rowcount), it's the table row I am working with
    FindBankInfo lo, loMap, loMap2, rowCount
End If

我可以这样工作

If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
    For Each lr in lo.ListRows
        rowCount = rowCount + 1
        FindBankInfo lo, loMap, loMap2, rowCount
    Next lr
End If

像这样,每次发生更改时它都会遍历每一行,如果它已经填充,我会跳过它。但这感觉很愚蠢而且效率低下,如果有很多行,当我检查填充行之间的空白行时会变得很慢,所以我不能只以空白结束。

我需要的是一个 Target,如何将该 Target 范围转换为相关的 ListObject Range 并获取 ListObject 行号???

Target.ListObject 为我的表格提供了适当的范围,因此我知道它可以触摸它,并且我可以获得我想要与之交互的确切范围,但行号与工作表行数相关,而不是与表格相关。非常感谢您的指导,谢谢。

【问题讨论】:

我没有完全遵循,因为我没有看到您的其余代码,但请查看 target.row 以开始... 我稍后将不得不编辑问题,我很抱歉。至于 Target.row,它会给我绝对行,而不是与表相关的行。为了更清楚,如果我的表格从 A5 开始,那么表格计数标题中的第二行是 A7。 Target.row 会给我 7。但是对于 lo.Listrow(index) 它不是 7,索引将是 2。再次抱歉不清楚,我回家后会编辑。 您的FindBankInfo 似乎是一个子路由,但我想它可以很容易地更改为一个函数。为什么不直接将其用作 UDF 并将其作为公式放在正确的列上,而不是让脚本在整个工作表中运行,找到您要查找的行然后写入值? 然后 Target.row - lo.range.row 会得到你 2 不确定您是否得到答案,但如果您的表格是静态的,您可以将您命名为 table.range。然后,您可以获得该范围内的行。看看“在 excel 中命名一个范围” 【参考方案1】:

将您的子例程转换为 UDF 并用作表格上的公式。

【讨论】:

以上是关于Excel VBA 在给定范围的情况下使用表格内的单元格的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 删除不在给定日期范围内的数据

Excel VBA删除范围内的空白行

在使用 VBA 的 MS Access 链接的 Excel 电子表格中指定“开放式”范围

如何将文件夹内的文件名自动写入excel表格

用VBA条件锁定EXCEL单元格的问题,高手进!

在 Excel 2016 中使用 VBA 将选定范围移动到一列上