我有一张包含代码的工作表,该代码将根据选择的单元格触发一些VBA代码。 (单元格具有按钮的功能)。 由于用户可以选择包括多个单元格的范围,因此可以使用targe.count来限制该问题(当单元格包含在所选范围内时不触发vba代码,但它不是唯一的单元格) 当用户选择多个单元格(包括触发vba BUT的单元格)时,确实可以很好地工作,我想知道为什么当用户使用CTRL-A选择所有单元格时,它会给出错误消息
这是工作表背后的代码
Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
run some code
如果我用contrl-A选择整个工作表,则会发生错误。
运行时错误6 溢出
更奇怪。该工作表包含一个表(listobject)如果我在表中执行ctrl-A,则整个表都被选中,并且不会发生错误。 如果我在表外执行ctrl-A,则会选中整个工作表,并且会发生错误。
对此行为有一些解释吗?
答案 0 :(得分:2)
用Target.Count
属性替换Target.CountLarge
。
参考:http://msdn.microsoft.com/en-us/library/office/ff196838(v=office.15).aspx
答案 1 :(得分:1)
tldr; 。您正试图在Range.Count属性中检索太大的数字。
编写Range.Count属性以返回一个长整数,该整数被解析为range对象内单个单元格的总数。
Range.Count property (Excel)
返回一个Long值,该值表示集合中对象的数量。
您收到Runtime error 6: Overflow
是因为XLSX工作表上的单个单元格总数为1,048,576行×16,384(从A到XFD)。解析为17,179,869,184个单个单元格,这些单元格超过有符号长整数¹的最大允许值。
¹有符号长整数可以保留的最大值为2,147,483,647或&H7FFF,FFFF16。