VBA代码仅运行至第100行后失效,求原因排查
首先先还原你的问题和不完整的代码片段:
将以下VBA代码仅能运行至第100行,后续无法正常执行,烦请帮忙排查原因:
Sub sum1() Dim wb As Workbook Dim ws As Worksheet Dim x As Double, y As Integer Dim lastrow As Long Dim sumbalance As Integer Dim Reached As Boolean Set wb = ThisWorkbook Set ws = wb.Sheets("Sheet1") sumbalance = 0 lastrow = ws.Range("A" & Rows.Count).End(xlUp).Row For x = 2 To lastrow If Range("A" & x).Value = Range("A" & x + 1) Then sumbalance = sumbalance + Range("B" & x).Va...
结合这段代码和你的问题,我整理了几个最可能导致代码在100行后挂掉的原因:
行号变量类型选错了:你用
Double类型的x来遍历行号,虽然前100行的整数Double值没问题,但行号本质是整数类型,当行号超过一定数值(比如100之后),Double的精度可能会出现偏差,导致引用错误的单元格。赶紧把x改成Long,和lastrow的类型保持一致,这是很常见的坑。Range引用没绑定工作表:代码里的
Range("A" & x)没有指定是ws(也就是Sheet1)里的范围!如果运行过程中不小心切换到了其他工作表,代码就会去读当前激活表的单元格,前100行可能刚好两个表数据一致,100行后不一样就出错了。所有Range前面都要加上ws.,比如ws.Range("A" & x),这是必须的好习惯。循环越界触发错误:你的循环是从2到
lastrow,但里面用到了x+1的行号。当x走到lastrow的时候,x+1就超出了数据的最后一行,这时候引用的单元格要么是空值,要么根本不存在,直接触发错误中断。循环上限应该改成lastrow - 1,这样就不会越界了。代码截断导致语法错误:你贴的代码最后是
.Va...,明显是没写完(应该是.Value吧?),如果实际代码里这里没补全,运行到这里直接语法报错终止,自然没法继续执行。先检查完整代码,确保所有语句都写完。累加值溢出:
sumbalance定义成了Integer,这个类型的最大值是32767,如果前100行的B列数值累加后刚好超过这个数,就会触发溢出错误,代码直接停掉。改成Long类型就不会有这个问题了。
你可以先从这些点入手排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Mahantesh

