Как установить несколько диапазонов, которые при изменении запускают несколько разных макросов? - PullRequest
0 голосов
/ 10 января 2020

Мой вопрос довольно прост, но по какой-то причине я не могу понять, как это сделать. Дело в том, что у меня 16 разных диапазонов и 16 разных макросов.

Именованные диапазоны:

  • GManA
  • GVisA
  • GManB
  • GVisB

Это продолжается до GManH и GVi sH.

Макросы, которые я хочу запустить, очень похожи. Проблема заключается в том, что всякий раз, когда я делаю какие-либо изменения в GManA ИЛИ GVisA , я запускаю макросы AttResA и CpGrlA . До этого момента все правильно в коде, но я думаю, что все видят, куда я иду с этим. Я хочу расширить это: всякий раз, когда я делаю изменения в GManB ИЛИ GVisB , он должен запускать макросы AttResB и CpGrlB .

Мой код на данный момент:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("GManA,GVisA")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
    AttResA
    CpGrlA
End If
End Sub

Как я могу расширить это?

1 Ответ

0 голосов
/ 10 января 2020

Я думаю, это действительно зависит от того, что делают другие ваши подводные лодки. Я бы порекомендовал изменить Sub, чтобы принять измененные ячейки.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Debug.Print "Target: " & Target.Address
    Set KeyCells = Intersect(Target, Range("GManA,GVisA"))
    If Not KeyCells Is Nothing Then
        AttResA KeyCells
        CpGrlA KeyCells
    Else
        Set KeyCells = Intersect(Target, Range("GManB,GVisB"))
        If Not KeyCells Is Nothing Then
            AttResB KeyCells
            CpGrlB KeyCells
        End If
    End If
    Set KeyCells = Nothing
End Sub

' Normal Module
Sub AttResA(ByRef Target As Range)
    Debug.Print "AttResA()", Target.Address
End Sub

Sub CpGrlA(ByRef Target As Range)
    Debug.Print "CpGrlA()", Target.Address
End Sub

Sub AttResB(ByRef Target As Range)
    Debug.Print "AttResB()", Target.Address
End Sub

Sub CpGrlA(ByRef Target As Range)
    Debug.Print "CpGrlB()", Target.Address
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...