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 在给定范围的情况下使用表格内的单元格的主要内容,如果未能解决你的问题,请参考以下文章