我想写一个简单的函数,告诉我列长度,给出列的第一个记录。因此,我写了类似......
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"的一部分。工作表,但滚动是在活动工作表上完成的。除了在每次通话中激活firstCell
之外,有没有办法让这个结果得到正确的结果而不管活动表?
答案 0 :(得分:2)
这是因为你给它一个不完全合格的单元格地址:
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 this site但请注意,并非所有提议的解决方案都同样有效!