Excel VBA For循环无警告被忽略,主程序异常求助
VBA代码For循环被忽略的原因排查
1. 变量声明错误导致类型不匹配
修改后的代码中:
Dim index, find As Integer
在VBA语法里,只有find被声明为Integer类型,index默认是Variant类型。而原代码中index明确声明为Integer,会自动对计算结果取整。
当MoldLengthComboBox.Value无法被10整除时(比如值为55),index = MoldWidthComboBox.Value *10 + MoldLengthComboBox.Value/10会得到带小数的结果:
- 原代码中
Integer类型的index会自动截断小数(55/10=5.5 → 5) - 修改后
Variant类型的index会保留小数(5.5),如果单元格B列的值是整数,条件Cells(RowNum, 2) = index永远不成立,循环内代码不会执行,最终触发find=0的提示。
2. 循环范围错误,遗漏最后一行数据
修改后的代码循环条件:
For RowNum = 2 To Range1.Count
Range1是Range("B2:B71"),Range1.Count的结果是70(共70个单元格),所以循环会从行2执行到行70,漏掉了行71的单元格。如果匹配的数据刚好在B71,循环就无法找到目标值,导致find=0。
原代码可能刚好匹配的数据在2-70行,所以没有暴露这个问题,修改后新增了find判断,就触发了错误提示。
修复方案
- 修正变量声明,明确指定
index的类型:
Dim index As Integer, find As Integer
- 修正循环范围,确保覆盖B2到B71的所有行:
For RowNum = 2 To Range1.Row + Range1.Rows.Count - 1 ' 或者直接写固定范围:For RowNum = 2 To 71
内容的提问来源于stack exchange,提问作者Hung Pham Vu
相关产品推荐
相关产品推荐

