Получение ошибки 1004 в коде, который работал после добавления нового кода

Я в тупике (много не нужно). У меня есть два фрагмента кода, которые, похоже, не работают вместе. Я хотел бы их или найти альтернативу. Первый — это код командной кнопки, который очищает содержимое и меняет форматирование. Это работало отлично, пока я не добавил, если значение меняет код. Код изменения значения относится к ячейкам в диапазоне, где форматирование меняется по сравнению с первым кодом. Я предполагаю, что это проблема. Коды используют именованные диапазоны по большей части. Я попытался использовать адреса ячеек, определить диапазон в коде, защитить/снять защиту и добавить имя листа в диапазон.

Этот код отлично работает без кода изменения значения if.

Private Sub CommandButton2_Click()
    Sheets("PN Generation").unprotect Password:="1234"
    Range("SELECT").Value = 2
    Range("PNSELECT").ClearContents
    Range("SMC").ClearContents
    Range("ALL").Interior.ColorIndex = 35
    Range("ALL").Font.ColorIndex = 49
    Range("SMC").Interior.ColorIndex = 6
    Range("SMCD").Font.ColorIndex = 15
    Range("SMCD").Interior.ColorIndex = 15
    Call protect

End Sub

При использовании приведенного ниже кода приведенный выше код возвращает ошибку 1004, определяемую приложением/объектом, начиная со строки 5 — Range(ALL).Interior.ColorIndex=35.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D3")) Is Nothing Then
    
            If Range("PNI") = "G" Or Range("PNI") = "U" Or Range("PNI") = "L" Or Range("PNI") = "T" Then
            Sheets("Reverse Build").Range("MV").Copy
            Sheets("PN Generation").Range("PFLMV").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "A" Or Range("PNI") = "B" Or Range("PNI") = "C" Or Range("PNI") = "V" Or Range("PNI") = "AR" Then
            Range("LV").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "S" Or Range("PNI") = "P" Then
            Range("SIN").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "F" Then
            Range("BARE").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
        
        If Range("PNI") = "R" Then
            Range("LVU").Copy
            Range("PF").PasteSpecial xlPasteValues
        End If
       End Sub

Я хотел бы понять, почему я получаю сообщение об ошибке и как исправить, чтобы предотвратить ошибку.


person Sean    schedule 08.12.2020    source источник
comment
Забыл упомянуть. ВСЕ именованные диапазоны — это D2:F4 и D7:F7. D3 — целевая ячейка.   -  person Sean    schedule 08.12.2020
comment
Вы тестируете только Range(PNI), вы оценили возможность использования блока Select Case вместо группы If?   -  person Vincent G    schedule 08.12.2020
comment
Нет, но только потому, что мне не очень повезло с использованием кода Select Case. Я понимаю концепцию, но я застрял в синтаксисе. Хотя это хорошая идея. Я попробую.   -  person Sean    schedule 08.12.2020
comment
Хорошей новостью является то, что мне удалось заставить Select Case работать. Плохая новость в том, что это не решило проблему. Я предполагаю, что проблема заключается в том, что когда код командной кнопки очищает ячейки, он запускает код ByValue до того, как код командной кнопки завершится. Имеет ли это смысл. Есть ли способ предотвратить это?   -  person Sean    schedule 08.12.2020
comment
Работал как шарм. Ненавижу, что до сих пор не думаю об этих простых исправлениях. Большое спасибо!!!   -  person Sean    schedule 08.12.2020


Ответы (1)


Application.EnableEvents = False... Application.EnableEvents = True сработало.

Спасибо БигБен. Знаешь, ты только что помог фанату Бенгалс. ржунимагу

person Sean    schedule 08.12.2020