Не запускать Sub Worksheet_Change (ByVal Target As Range) после того, как все ячейки на рабочем листе будут очищены - PullRequest
0 голосов
/ 08 мая 2018

У меня есть макрос, в который я импортирую текстовый файл и обновляю некоторые элементы этого файла, используя макрос, а затем заново создаю текстовый файл с обновленными элементами. Я проверяю некоторые ячейки в определенном рабочем листе (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

=============================================== ================================ Как только текстовый файл создан с обновленными столбцами, я очищаю все ячейки в USERSHEET. Тем не менее, я получаю ошибку во время выполнения «13» для несоответствия типов

Я хотел проверить, как можно избежать вызова Private Sub Worksheet_Change (ByVal Target As Range) после очистки рабочего листа (USERSHEET)

Любая помощь очень ценится.

Спасибо, Сэчин


Изменить:

Код, используемый для очистки пользовательской таблицы:

Sub Clear_User_Sheet()
    Sheets("UserSheet").Select
    Range("A2:R100002").Select
    Application.Wait (Now + TimeValue("0:00:01"))
    Selection.Delete
    Application.EnableEvents = False
    Application.Wait (Now + TimeValue("0:00:01"))
    Selection.Delete
    Selection.Delete
    Sheets("Control Panel").Select
End Sub

1 Ответ

0 голосов
/ 08 мая 2018

Попробуйте эту версию Clear_User_Sheet вместо:

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

PS. Если вы использовали код, который вы предложили в отредактированном ответе, вы вполне можете обнаружить, что EnableEvents в настоящее время установлено на False - вам нужно исправить это перед выполнением чего-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...