由于某种原因,当我使用插入行代码时,它会一直在插入新行!我写了一些代码,开头有一个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”。
我不知道为什么会出现无限循环!请帮忙。
谢谢
答案 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