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'
。