Excel Don';t清除工作表中的所有单元格后,运行子工作表\u更改(ByVal目标作为范围)

Excel Don';t清除工作表中的所有单元格后,运行子工作表\u更改(ByVal目标作为范围),excel,vba,Excel,Vba,我有一个宏,其中我导入一个文本文件,并使用宏更新该文件的一些元素,然后使用更新的元素重新创建文本文件。我正在验证特定工作表(USERSHEET)中的某些单元格,以确保用户输入正确,并使用以下子项: Option Explicit Public Rec_Cnt As Integer Private Sub Worksheet_Change(ByVal Target As Range) Rec_Cnt = Sheets("MD").Cells(3, 7) Dim Rng1 As Range

我有一个宏,其中我导入一个文本文件,并使用宏更新该文件的一些元素,然后使用更新的元素重新创建文本文件。我正在验证特定工作表(USERSHEET)中的某些单元格,以确保用户输入正确,并使用以下子项:

    Option Explicit
Public Rec_Cnt As Integer
Private Sub Worksheet_Change(ByVal Target As Range)

Rec_Cnt = Sheets("MD").Cells(3, 7)
Dim Rng1 As Range
Dim Rng2 As Range
Dim Rng3 As Range

Set Rng1 = Range("E2:E" & Rec_Cnt)
Set Rng2 = Range("K2:K" & Rec_Cnt)
Set Rng3 = Range("Q2:Q" & Rec_Cnt)


If Not Application.Intersect(Target, Rng1) Is Nothing Then
If Len(Target) > 10 Then
   Call Original_Ticket_Error
Exit Sub
End If
ElseIf Not Application.Intersect(Target, Rng2) Is Nothing Then
If Len(Target) > 10 Then
   Call Original_Cnj_Ticket_Error
Exit Sub
End If
ElseIf Not Application.Intersect(Target, Rng3) Is Nothing Then
If Len(Target) > 10 Then
   Call Original_Ticket_Error
Exit Sub
End If
End If

End Sub

Sub Original_Ticket_Error()
MsgBox "Original Ticket Number is more 10 characters"
End Sub

Sub Original_Cnj_Ticket_Error()
MsgBox "Original Conj. Ticket Number is more 10 characters"
End Sub
=============================================================================== 一旦使用更新的列创建了文本文件,我将清除用户表中的所有单元格。 但是,由于类型不匹配,我得到一个运行时错误“13”

我想检查在清除工作表(USERSHEET)后如何避免调用私有子工作表_Change(ByVal Target As Range)

非常感谢您的帮助

谢谢, 萨钦


编辑:

用于清除用户表的代码:


请尝试此版本的
清除用户工作表

Sub Clear_User_Sheet()
    Application.EnableEvents = False
    Sheets("UserSheet").Range("A2:R100002").Delete
    Application.EnableEvents = True
End Sub

注:如果您使用了您在编辑的答案中建议的代码,您可能会发现,
EnableEvents
当前设置为
False
-您需要在运行任何其他操作之前更正该设置。

您的代码假设单个单元格已更改,因此如果不是这样,您必须循环目标并检查每个单元格(如果计数>1,则退出子单元格)。您也可以在清除工作表之前禁用事件,然后再次启用它们。@CLR-非常感谢您的回答。我确实添加了enable Application.EnableEvents=False,但仍然给出了错误。下面是我用来清除用户表的代码:次清除用户表()工作表(“用户表”)。选择范围(“A2:R100002”)。选择应用程序。等待(现在+时间值(“0:00:01”))选择。删除应用程序。使能事件=假应用程序。等待(现在+时间值(“0:00:01”))选择。删除选择。删除工作表(“控制面板”)。选择End Sub在哪里调用
清除用户\u工作表
?我在问题的代码中看不到它。
选择。删除
将导致
工作表。更改
事件将触发,除非您事先禁用事件,然后记得启用它们。@DarrenBartrup Cook-我正在调用Sub Clear\u用户\u工作表()创建文件后,发布更新。并且选择.Delete在该子文件中,我知道该选择.Delete正在调用sheet.change事件。如何避免它调用此事件?我不确定我在这里做的事情是否正确?
Sub Clear_User_Sheet()
    Application.EnableEvents = False
    Sheets("UserSheet").Range("A2:R100002").Delete
    Application.EnableEvents = True
End Sub