Vba iLastRow不能正常工作

Vba iLastRow不能正常工作,vba,excel,count,rows,Vba,Excel,Count,Rows,我对VBA中的iLastRow有问题。我使用以下标记来定义列中包含数据的最后一行: iLastRow = Cells(Rows.Count, "H").End(xlUp).Row 然而,我总是得到最后一行的数据作为结果。因此,如果A列中最后一行的数据是第12行,H列中最后一行的数据是10,那么结果仍然是12。出于我的目的,我需要代码给我10作为结果。 非常感谢您的帮助,谢谢 这应该有效: iLastRow = Range("H" & Rows.Count).End(xlUp).Row

我对VBA中的
iLastRow
有问题。我使用以下标记来定义列中包含数据的最后一行:

iLastRow = Cells(Rows.Count, "H").End(xlUp).Row
然而,我总是得到最后一行的数据作为结果。因此,如果A列中最后一行的数据是第12行,H列中最后一行的数据是10,那么结果仍然是12。出于我的目的,我需要代码给我10作为结果。 非常感谢您的帮助,谢谢

这应该有效:

iLastRow = Range("H" & Rows.Count).End(xlUp).Row
我建议编写自定义函数:

Function GetLastRow(ByVal wsh as Worksheet, Optional sColName As String = "A") As Integer
    GetLastRow = wsh.Range(sColName & wsh.Rows.Count).End(xlUp).Row
End Function
用法:

iLastRow = GetLastRow(ActiveSheet, "H")
干杯,
Maciej

这应该可以:

iLastRow = Range("H" & Rows.Count).End(xlUp).Row
我建议编写自定义函数:

Function GetLastRow(ByVal wsh as Worksheet, Optional sColName As String = "A") As Integer
    GetLastRow = wsh.Range(sColName & wsh.Rows.Count).End(xlUp).Row
End Function
用法:

iLastRow = GetLastRow(ActiveSheet, "H")

干杯,
Maciej

如果正确的工作表处于活动状态,则您发布的代码应能工作。如果正确的工作表处于活动状态,则您发布的代码应能工作。

不幸的是,到目前为止,没有一个建议的解决方案对我有效。这可能与我将区域格式化为表的事实有关吗?因此,即使此列中的单元格为空,我也会始终返回表的最后一行…?

不幸的是,到目前为止,所有建议的解决方案都不适用于我。这可能与我将区域格式化为表的事实有关吗?因此,即使此列中的单元格为空,我也会始终返回表的最后一行…?

找到了适用于此特定情况的有效解决方案:


iLastRow=范围(“H1”)。结束(xlDown)。行+1找到了适用于此特定情况的有效解决方案:


iLastRow=Range(“H1”).End(xlDown).Row+1

为什么您要编写一个占用4行代码的自定义函数,而不是只占用一行代码。@Chrismas007因为您将一直在许多不同的项目中使用此函数。拥有一个可以从一个文件复制到另一个文件的标准函数,并且可以从任何子例程/过程调用该函数,这是一个很好的实践。@Chrismas007,有很多原因。第一:代码在上下文中执行,第二:它提供扩展,就像另一列一样;)@Chrismas007,这不是编写代码的时间问题,而是良好编程实践的问题。比方说,您需要在不同的模块中多次找到最后一行。更好的方法是:硬编码一行代码或使用自定义功能,这提供了一种在不激活工作表的情况下查找最后一行的方法。很多时候,我看到代码会导致崩溃,因为代码没有上下文使用。我实际上会使用一个更长的函数,Siddharth Rout解释说(第二个函数)。原因是数不清的。我可能需要在几十个程序中找到“最后一行”。只有一个函数可以做到这一点,从而降低了出错的风险,减少了修改几十行代码的需要(如果我的需求中有任何变化,等等)。还有一些情况下,
.End(xlUp)
等无法提供正确的结果。而且,正如@MaciejLos所提到的:它提供了有用的扩展…为什么您要编写一个占用4行代码的自定义函数,而不仅仅是一行。@Chrismas007,因为您将在许多不同的项目中一直使用此函数。拥有一个可以从一个文件复制到另一个文件的标准函数,并且可以从任何子例程/过程调用该函数,这是一个很好的实践。@Chrismas007,有很多原因。第一:代码在上下文中执行,第二:它提供扩展,就像另一列一样;)@Chrismas007,这不是编写代码的时间问题,而是良好编程实践的问题。比方说,您需要在不同的模块中多次找到最后一行。更好的方法是:硬编码一行代码或使用自定义功能,这提供了一种在不激活工作表的情况下查找最后一行的方法。很多时候,我看到代码会导致崩溃,因为代码没有上下文使用。我实际上会使用一个更长的函数,Siddharth Rout解释说(第二个函数)。原因是数不清的。我可能需要在几十个程序中找到“最后一行”。只有一个函数可以做到这一点,从而降低了出错的风险,减少了修改几十行代码的需要(如果我的需求中有任何变化,等等)。还有一些情况下,
.End(xlUp)
等无法提供正确的结果。而且,正如@MaciejLos所提到的:它提供了有用的扩展…可能重复检查代码行,如果您从A列中获取最后一行,则表示您编写了“A”而不是“H”。为避免错误的工作簿或工作表处于活动状态,请使用引用
此工作簿.Sheet1”).cells(Rows.Count,“H”).End(xlUp).Row
,例如。检查代码行可能重复,如果您从A列中获取最后一行,则表示您写入了“A”而不是“H”。为避免错误的工作簿或工作表处于活动状态,请使用引用
thiswoolk.sheets(“Sheet1”).cells(Rows.Count,“H”).End(xlUp).Row
,不幸的是,情况就是这样,但它仍然不起作用。不幸的是,情况就是这样,但它仍然不起作用。这可能是iLastRow返回错误号码的原因。这可能是iLastRow返回错误号码的原因。