是否有可能延迟Worksheet_Change代码? Excel Vba

我正在填充一些数据validation下拉列表,它们的值在一个表中。
我有一个button(链接到用户窗体)为用户添加项目的表。 input新值后,表格的Worksheet_Change代码对表格进行sorting。
所以如果一个值被删除,那么这个表就会调整。

但现在我的问题是当用户窗体中的button被点击首先一行被添加到表中,然后值被添加到该行。 在添加值之前,Worksheet_Change已经全部检测到新的空行并将其删除。
是否有可能延迟这一点,或有人知道一个更好的解决办法?

用户表单的代码:

Private Sub butAddProject_Click() Dim listSheet As Worksheet Dim listTable As listObject Dim newRow As ListRow Dim ProjectName As String ProjectName = txtAddProject.Text Set listSheet = Sheets("Projects-Tasks") Set listTable = listSheet.ListObjects(1) If ProjectName <> "" Then Set newRow = listTable.ListRows.Add newRow.Range(1, 1).Value = ProjectName Else MsgBox "Enter a project name first!" End If txtAddProject.Text = "" formAddProject.Hide End Sub 

最后是Worksheet_Change的代码:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim strList As String Set ws = Sheets("Projects-Tasks") strList = Cells(2, Target.Column).listObject.Name If strList <> "" Then Application.ScreenUpdating = False With ListObjects(strList).Sort .SortFields.Add _ Key:=Cells(3, Target.Column), _ SortOn:=xlSortOnValues, _ Order:=xlAscending .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With With ws.ListObjects(strList) .Resize .DataBodyRange.CurrentRegion End With End If Application.ScreenUpdating = True End Sub 

提前致谢!

添加新行时closures事件:

 If ProjectName <> "" Then application.enableevents = False Set newRow = listTable.ListRows.Add application.enableevents = True newRow.Range(1, 1).Value = ProjectName Else 

我假设你仍然希望它在添加新值时进行sorting,所以我在添加新值的行之前重置事件。

 Private Sub butAddProject_Click() Dim listSheet As Worksheet Dim listTable As listObject Dim newRow As ListRow Dim ProjectName As String Application.EnableEvents=False ProjectName = txtAddProject.Text Set listSheet = Sheets("Projects-Tasks") Set listTable = listSheet.ListObjects(1) If ProjectName <> "" Then Set newRow = listTable.ListRows.Add newRow.Range(1, 1).Value = ProjectName Else MsgBox "Enter a project name first!" End If txtAddProject.Text = "" formAddProject.Hide Application.EnableEvents=True End Sub