vba中的整数溢出,即使我使用长数据types

我写了一个简单的vbamacros。 我正在检查一列中的每个单元格,并且每当它再次回到1时,我都会将之前的值(例如4)复制到相应的插槽中:

1 2 3 4 1 2 3 

所以输出结果如下所示:

 1 4 2 4 3 4 4 4 1 3 2 3 3 3 

覆盖有符号整数的范围似乎工作正常。 然而,一旦我打到单元格32,769,就会一遍又一遍地产生相同的数字,这让我认为它溢出了。

实际上,debugging器会抛出错误:

 run-time error '1004': Application-defined or object-defined error 

它突出了这一行代码:

 Range("L" & start).Resize(iCounter) = curVal 

根据debugging器,开始是值32769,iCounter是值32771,并且curVal是3。

而不是这样做:

 1 3 2 3 3 3 

它这样做(5是以前的大值):

 1 5 2 5 3 5 

正如你所看到的,这是不正确的,即使我的程序说最高值应该是3.我假设发生了一些types的溢出。 但是,我使用长的值,所以我不知道为什么溢出发生:

 Sub calculateLargest() Worksheets("parlam2010_resumen").Activate Range("K9").Activate Dim curVal As Long Dim nextVal As Long Dim iCounter As Long Dim start As Long iCounter = 9 start = 9 Do If ActiveCell.Value = "" Then Exit Do curVal = ActiveCell.Value nextVal = ActiveCell.Offset(1, 0).Value If curVal > nextVal Then Range("L" & start).Resize(iCounter) = curVal start = iCounter + 1 End If ActiveCell.Offset(1, 0).Activate iCounter = iCounter + 1 Loop End Sub 

有任何想法吗?

没有整数溢出。 你只是没有正确调整curVal的目标。

 Range("L" & start).Resize(iCounter - start + 1) = curVal 

在K32771 iCounter是32771,并且start是32769.你的Range.Resize属性不应该是32771.它应该是32771 – 32769 +1。这5个不是根据1,2,3来计算的。 在前面的迭代中,他们从写太多的单元格中剩下5个单元。

随着iCounter增长并start向下移动,最终您将尝试写入工作表下边界的单元格。 这就是生成Run-time error '1004'