Невозможно активировать макрос, когда активные изменения клетки через формулу

голоса
0

Моя цель состоит в том, чтобы вызвать расширенный фильтр макрокоманду, когда ячейка В2 изменяет (часть критериев фильтрации). В2 связана с другой ячейкой (в другом листе), который динамически получает данные из внешних источников. Проблема я столкнулся в том, что макрос не активируется автоматически. Только тогда, когда я вручную изменить что-то в В2 макрос активируется. В противном случае старые критерии остаются на месте. А1 G1 имеет 7 категорий и A2-G2 имеет входы для фильтра. Только B2 изменения эффективно. Я не закодированы в VBA перед таким образом большую часть этого кода копируется из веб-сайтов и модифицированы для моей книги. Ниже мой код. Цените любую помощь по этому вопросу.

Option Explicit
 'Create variable to hold values
Dim Monitored

Sub Advanced_Filtering()
Range(A7:G730).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range(A1:G2), _
CopyToRange:=Sheets(Sheet3).Range(L1:R1)
End Sub



Private Sub Worksheet_Activate()
    Monitored = Range(B2).Value 'Read in value prior to any changes
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
     'Check target to determine if macro is triggered
    If Intersect(Target, Range(B2)) Is Nothing Then Exit Sub
     'Prevent looping of code due to worksheet changes
    Application.EnableEvents = False
     'Compare monitored cell with initial value
    If Range(B2).Value <> Monitored Then
         'Do things as a result of a change
       Call Advanced_Filtering
         'Reset Variable with new monitored value
        Monitored = Range(B2).Value
    End If
     'Reset events
    Application.EnableEvents = True
End Sub
Задан 09/10/2019 в 12:59
источник пользователем
На других языках...                            


1 ответов

голоса
0

Вероятно, проще было бы исправить, чтобы поместить событие Worksheet_Change под клетки, которые генерируют значение на вашей ячейке B2, так как изменения в значениях формулы не вызвать событие Change ... или вы можете изменить его Worksheet_Calculate случае вместо этого, это будет подобрать изменения в формуле результатов, как показано ниже:

Option Explicit
 'Create variable to hold values
Dim Monitored

Sub Advanced_Filtering()
    Range("A7:G730").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A1:G2"), CopyToRange:=Sheets("Sheet3").Range("L1:R1")
End Sub

Private Sub Worksheet_Activate()
    Monitored = Range("B2").Value 'Read in value prior to any changes
End Sub

Private Sub Worksheet_Calculate()
    Dim Xrg As Range
    Set Xrg = Range("B2")

    If Not Intersect(Xrg, Range("B2")) Is Nothing Then
        Application.EnableEvents = False
         'Compare monitored cell with initial value
        If Range("B2").Value <> Monitored Then
             'Do things as a result of a change
           Call Advanced_Filtering
             'Reset Variable with new monitored value
            Monitored = Range("B2").Value
        End If
         'Reset events
        Application.EnableEvents = True
    End If
End Sub
Ответил 09/10/2019 в 13:20
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more