Nu se poate activa Macro atunci când modificările celulare activă prin formula

voturi
0

Scopul meu este de a declanșa avansat macro filtru atunci când celula B2 se schimbă (o parte a criteriilor de filtrare). B2 este legat de o altă celulă (într-o altă foaie de lucru), care devine dinamic date din surse externe. Problema am cu care se confruntă este faptul că macro nu se activează în mod automat. Numai atunci când am schimba manual ceva în B2 este macro activat. În caz contrar, criteriile vechi rămâne în vigoare. A1 la G1 are 7 categorii și A2-G2 are intrările pentru filtru. Numai modificările B2 în mod eficient. Eu nu am codificate în VBA înainte, astfel încât cea mai mare parte acest cod este copiat de pe site-uri web și modificate pentru registrul de lucru meu. Mai jos este codul meu. Aprecia orice ajutor în acest sens.

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
Întrebat 09/10/2019 la 12:59
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Probabil cel mai simplu ar fi fix pentru a plasa evenimentul Worksheet_Change în celulele care generează valoarea pe B2 mobil, ca modificări ale valorilor formulă nu declanșează evenimente de modificare ... sau îl puteți schimba la eveniment Worksheet_Calculate în schimb, acest lucru va ridica schimbări în formula de mai jos rezultatele ca:

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
Publicat 09/10/2019 la 13:20
sursa de către utilizator

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