不需要的插入行无限循环

由于某些原因,当我使用插入行代码,它不断插入一个新的行永远! 我写的代码在开始时有一个do while循环遍历C列中的所有单元格,当它碰到C列中的空单元格时,variables保持单元格编号。

然后我编写了另一个子程序(当电子表格中的某些内容发生变化时被调用),如果在列C中的空单元格中写入了某些内容,则插入新行。 但它只是继续下去!

以下代码在一个模块下

Dim a, count As Integer Sub check() a = 0 count = 3 Do While a = 0 count = count + 1 If Range("C" & count).Value = "" Then a = 1 End If Loop End Sub Sub addrow() If Range("C" & count).Value <> "" Then Range("C" & count).Offset(1).EntireRow.Insert count = count + 1 With Range("B" & count, "AL" & count) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous End With End If End Sub 

这个代码在工作表下

 Private Sub Worksheet_Change(ByVal Target As Range) addrow End Sub 

并打开工作簿时调用子程序“CHECK”。

我不知道为什么有一个无限循环! 请帮忙。

谢谢

只需将您的Worksheet_Change事件与Application.EnableEvents=False/True夹心:

 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False addrow Application.EnableEvents = True End Sub 

原因很简单 – 当Worksheet_Change事件插入新行时,它更改表单的内容,再次触发Worksheet_Change事件。 Worksheet_Change事件再次插入新行,依此类推。 无限循环:)

顺便说一句,最好的做法是使用error handling(即使在addrow子例程中发生错误,它也会返回Application.EnableEvents = True ):

 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorHandler Application.EnableEvents = False addrow ExitHere: Application.EnableEvents = True Exit Sub ErrorHandler: Resume ExitHere End Sub