vba target.count=全选时出现1个错误

vba target.count=1 error when selecting all

我有一个 sheet 包含的代码会触发一些 VBA 代码,具体取决于哪些单元格被 selected。 (一个单元格具有按钮的功能)。 由于用户可以 select 包含多个单元格的范围来限制该问题(当单元格包含在 selected 范围内时不会触发 vba 代码,但这不是唯一的CELL) 正在使用 targe.count 当用户 select 几个单元格包括触发 vba 的单元格时,这确实工作正常但我想知道为什么当用户 select 全部使用 CTRL-A[=13 时它会出错=]

这是 sheet

背后的代码
Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
     run some code

如果我select整个sheet用contrl-A出错。

运行时错误 6 溢出

甚至更奇怪。 sheet 包含一个 table (listobject) 如果我在 table 中执行 ctrl-A 整个 table 是 selected 并且没有错误发生。 如果我在 table 之外执行 ctrl-A,整个 sheet 被 selected 并发生错误。

对这种行为有什么解释吗?

tldr; 您试图将太大的数字检索到 Range.Count 属性.

Range.Count 属性 被写入 return 一个长整数,解析为范围对象内单个单元格的总数。

Range.Count property (Excel)
Returns a Long value that represents the number of objects in the collection.

您收到 Runtime error 6: Overflow 是因为 XLSX 工作表上单个单元格的总数为 1,048,576 行 × 16,384(A 到 XFD)列。这解析为 17,179,869,184 个单独的单元格,超过了有符号长整数的最大允许值¹。


¹ 有符号长整数可以保留的最大值为 2,147,483,647 或 &H7FFF,FFFF16.

将您的 Target.Count 替换为 Target.CountLarge 属性。

参考:http://msdn.microsoft.com/en-us/library/office/ff196838(v=office.15).aspx