Автозаполнение ячеек на основе выпадающего списка в Excel - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать VBA, которая дает мне автоматические c значения на основе раскрывающегося списка в форме. Проблема в том, что когда я запускаю макрос, он вызывает ошибку и Excel перестает работать. Любая помощь в этом случае приветствуется.

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("$G$11") = "UD Sheet" Then
        Rows("20:25").EntireRow.Hidden = False
    Else
        Rows("21:25").EntireRow.Hidden = True
    End If

If Range("G12").Value = "Flex Tape" Then
        Range("B20").Value = "None"
    Else
        Range("B20").Value = ""
    End If
exitHandler:
  Application.EnableEvents = True
  Exit Sub

End Sub

1 Ответ

0 голосов
/ 12 марта 2020

Первым делом в вашем коде не нужно ставить Exit Sub перед End Sub. Код заканчивается после этой строки, так что это избыточность.

Следующее, что вам нужно понять, это то, что событие изменения будет срабатывать, если вы не отключите его явно. Таким образом, это означает, что когда вы прячете строку на этом листе, событие изменения будет происходить, поскольку на листе будут происходить изменения. то есть (прячущиеся строки).

Для этого вам нужно отключить EventsListeners приложения, используя Application.EnableEvents = False. Таким образом, приложение может выполнить одну вещь, основываясь на этом первом событии.

Следующее, что вам нужно иметь в виду, - это отслеживать, где происходят Изменения, и запускать вашу программу. Target - это объект Range, который возвращает диапазон, в котором на листе происходит указанное изменение c.

Для этого вам нужно проверить, нужно ли запускать процедуру на основе цели с помощью функции Пересечение.

Весь код выглядит следующим образом:

     Private Sub Worksheet_Change(ByVal Target As Range)
     Application.EnableEvents = False

     If Not Intersect(Target, Range("G11")) Is Nothing Then
         If Range("$G$11") = "UD Sheet" Then    
             Rows("20:25").EntireRow.Hidden = False
         Else
             Rows("21:25").EntireRow.Hidden = True
         End If
     End If

     If Not Intersect(Target, Range("G12")) Is Nothing Then
         If Range("G12").Value = "Flex Tape" Then
             Range("B20").Value = "None"
         Else
             Range("B20").Value = ""
         End If
     End If
     Application.EnableEvents = True
     End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...