【问题标题】:Unwanted Insert Row Infinite Loop不需要的插入行无限循环
【发布时间】:2014-09-27 15:57:21
【问题描述】:

由于某种原因,当我使用插入行代码时,它会一直插入新行!我写的代码在一开始有一个do 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”被调用。

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

谢谢

【问题讨论】:

  • 在您的Private Sub Worksheet_Change 事件中,在addrow 之前添加Application.EnableEvents=False,在addrow 之后添加Application.EnableEvents=True。原因很简单——worksheet_change事件插入新行,插入行触发worksheet_change事件。 W_change 事件插入新行,以此类推。无限循环:)
  • 欢迎使用递归 :-) 您的更改事件由模块本身触发。按照@simoco 的建议去做

标签: excel excel-2007 excel-2010 vba


【解决方案1】:

只需将您的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 事件再次插入新行,以此类推。无限循环:)

顺便说一句,最好的做法是使用错误处理(即使在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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多