我看到一些 SO 用户在尝试使用 ; 的某些变体时遇到了问题Cells.Count
。VBA 代码在某些情况下会引发溢出错误。
作为参考,请参阅对此答案的评论:
我认为这会起作用,但我得到一个“溢出”错误,它指向代码“If Master.Cells.SpecialCells(xlCellTypeVisible).Count > 0 Then”——它似乎没有过滤任何特别的东西– 用户 1556069
这个答案:
这是 onyl 工作(和 Cells.Count 没有工作),因为后者使用了一个整数,16 位,最大值 65,536 并且整个电子表格返回了一个更大的数字?– 快速代码
我假设在幕后某处 VBA 试图将单元格计数强制为小整数(16 位)或长整数(32 位)。Excel 2007 工作表的单元格计数会溢出这两种数据类型。不幸的是,我现在无法隔离它,因为我手边没有 Excel 2007 的副本,并且实际上无法重现您的错误。– mwolfe02
为了理解这一点,我尝试复制自己并在尝试分配Cells.Count
为整数时出现溢出。这是有道理的,因为该值对于 Integer 数据类型来说太大了。
在 Excel 2003 和 2010 中使用下面的代码,当我尝试分配为 Long 或 Variant 时,我得到了一个数字结果。
Option Explicit
Sub testInteger()
Dim i As Integer
i = Cells.Count 'Overflow
Debug.Print i 'Doesn't get this far...
End Sub
Sub testLong()
Dim l As Long
l = Cells.Count
Debug.Print l 'Prints 16777216 in both versions
End Sub
Sub testVariant()
Dim v As Variant
v = Cells.Count
Debug.Print v 'Prints 16777216 in both versions
End Sub
正如您在我的评论中看到的那样,该Cells.Count
值是16777216
(对于 2003 年是正确的),但对于两个版本都是相同的,这对我来说没有意义。从上述链接的答案之一中引用mwolfe02 :
Excel 2007 工作表有 1,048,576 行和 16,384 列,总共 17,179,869,184 个单元格。
这告诉我 2010 年印刷的价值至少应该是(我相信它应该真的是一样的)17,179,869,184
。
那么为什么这个数字不能正确打印/为什么在 2010 年返回 2003 的值?