特定工作表的范围地址(而不是活动工作表)
我想写一个简单的函数,告诉我列的长度,给列的第一个logging。 因此,我写了类似…
Public Function getColumnLen(firstCell As Range) As Long Dim lastRow As Long lastRow = Range(firstCell.Address).End(xlDown).Row getColumnLen = lastRow - firstCell.Row + 1 End Function
现在我有两个工作表在我的项目中,“A”和“B”,我打电话给VBA
Dim colLen as Long colLen = getColumnLen(Worksheets("A").Range("A1"))
当我想知道从A1开始的数据的高度。 colLen
的结果值取决于工作表“A”处于活动状态还是“B”处于活动状态。 问题是,在getColumnLen
函数中, firstCell
记得它是“A”表的一部分,但滚动是在活动工作表上完成的。 有没有什么办法可以使这个结果正确,而不pipe活跃的表格,除了在每个调用中激活firstCell
?
这是因为你给它一个不完全合格的单元地址:
lastRow = Range(firstCell.Address).End(xlDown).Row
在这里, firstCell.Address
返回$A$1
无论您在调用函数时指定了哪个工作表。
-
Worksheets("A").Range("A1").Address
-
Worksheets("B").Range("A1").Address
-
Worksheets("Whatever other sheet").Range("A1").Address
这些都返回$A$1
!
忘记Address
属性。 如果你想知道它做什么,请阅读VBA帮助。 只要做到这一点:
lastRow = firstCell.End(xlDown).Row
但是,请注意,如果范围包含空白单元格,则查找最后一行的这种方法将失败。 这个问题已经被解决了数十亿次。 只是search这个网站,但请注意,并非所有build议的解决scheme同样有效!