首页 > 解决方案 > UsedRange.Rows.Count 显示的数字与实际数字不同

问题描述

我需要一些关于 VBA 代码的专家建议。我创建了一个程序来比较两个简短的报告(相同的格式,从系统生成)。我for从第一行开始使用循环,直到最后一个使用UsedRange.Rows.Count. 我遇到的问题是 UsedRange.Rows.Count 总是返回 30,即使报告通常比这短 - 通常大约 20-25 行。即使我清除这些行中的内容,它也会返回 30。只有当我永久删除直到第 30 行的空白行时,它才会返回正确的数字。

为什么会这样?这让我很困扰,因为由于某种原因,宏突出显示了空白行(从实际使用的最后一行到第 30 行),将它们显示为报告之间的差异,而它们存在并且在两者中都是相同的(空白)。

谢谢

标签: excelvba

解决方案


UsedRange将扩展以包括 Excel 注册为包含任何数据的所有单元格。值、公式、格式——甚至(我怀疑这可能是这里发生的事情)一个已删除值的单元格。之外的任何东西都UsedRange被视为尚未正式存在。

打个比方,这就是空盒子没有盒子(工作表单元格是盒子)之间的区别。 UsedRange告诉你最后一个盒子在哪里,即使你已经清空它(使用Value = ""or ClearContent);只有删除行/列/单元格才能摆脱框本身。

很多 比使用更好的方法来获取数据的大小UsedRange(尽管它至少提供了一个上限)

例如,如果您的数据是连续的,那么您可以选择单个单元格(例如Range("A1")/ Cells(1,1)),然后获取CurrentRegion( Cells(1,1).CurrentRegion.Rows.Count)。或者,如果您知道一列始终包含数据,则可以使用End(..)查找最底部的单元格 ( Cells(Rows.Count,1).End(xlUp).Row)


推荐阅读