不需要的插入行无限循环

时间:2014-03-18 18:45:44

标签: excel excel-vba excel-2007 excel-2010 vba

由于某种原因,当我使用插入行代码时,它会一直在插入新行!我写了一些代码,开头有一个while循环遍历C列中的所有单元格,当它到达C列中的一个单元格为空时,变量会保留单元格编号。

然后我写了另一个子程序(当电子表格上的某些内容发生变化时会被调用),如果在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”。

我不知道为什么会出现无限循环!请帮忙。

谢谢

1 个答案:

答案 0 :(得分:2)

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事件再次插入新行,依此类推。无限循环:)

顺便说一句,最佳做法是使用错误处理(即使Application.EnableEvents = True子例程中发生错误,它也会设置回addrow):

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