VBA代码执行陷入死循环 无法在CTR30最后一行后插入新行求助
问题排查与修复方案
原有代码核心问题
- 循环查找插入位置的逻辑错误:你当前从B34开始向下偏移的判断条件
Loop While iter.Value <= numtimes,遇到空单元格时,空值和数值比较会直接返回False,导致循环立刻终止,所以只会在B34下方插入行,不会定位到真实的最后一行。 - 没有主动定位Cost_Sum工作表中B列的最后一个非空行,每次循环都重复从B34开始查找,逻辑冗余,且容易出现判断偏差。
- 变量
numtimes未显式声明,存在隐式声明的潜在风险。
修复后代码
Private Sub CommandButton1_Click() Dim n As Integer, numtimes As Integer Dim lastRow As Long On Error Resume Next n = InputBox("How many CTRs to be created?") On Error GoTo 0 ' 关闭错误忽略,避免后续异常被掩盖 If n >= 1 Then ' 提前定位B列最后一个非空行的位置,无需每次循环重复查找 lastRow = Cost_Sum.Cells(Cost_Sum.Rows.Count, "B").End(xlUp).Row For numtimes = 1 To n Sheet3.Copy After:=Sheets(Sheets.Count) If numtimes > 30 Then ' 直接在最后一行的下一行插入 Cost_Sum.Rows(lastRow + 1).Insert xlDown ' 插入后更新最后行计数,保证后续插入顺延 lastRow = lastRow + 1 End If Next End If End Sub
修复说明
- 用
End(xlUp)方法直接定位B列的最后一个非空行,不需要遍历查找,性能更高也不会因为空单元格判断出错,完全匹配你在CTR30最后一行之后顺延插入的需求。 - 每次插入行后同步更新最后一行的计数,确保后续插入的行始终在最新的内容末尾。
- 补充了错误处理重置语句,避免InputBox输入非数值时后续逻辑出现不可预期的错误。
- 补全了变量声明,规避隐式声明的潜在问题。
内容的提问来源于stack exchange,提问作者sintaxx92 Ox
相关产品推荐
相关产品推荐

