2014-03-18 16 views
1

由於某些原因,當我使用插入行代碼時,它會一直插入一個新行!我編寫的代碼在開始時有一個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 

和子程序下的「檢查」工作簿打開時被調用。

我不知道爲什麼有一個無限循環!請幫忙。

謝謝

+4

在'私人小組Worksheet_Change'事件添加'應用。在'addrow'之前的'EnableEvents = False'和'Addrow'之後的'Application.EnableEvents = True'。原因很簡單 - worksheet_change事件插入新行,插入行觸發worksheet_change事件。 W_change事件插入新行,依此類推。無限循環:) –

+1

歡迎來到遞歸:-)你的更改事件由模塊本身觸發。做什麼@simoco建議 –

+0

非常感謝 – HumanlyRespectable

回答

2

只是Application.EnableEvents=False/True三明治您Worksheet_Change事件:

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