Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Evitare Macro di Worksheet_Change

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Evitare Macro di Worksheet_Change

Postdi scanacc » 18/04/18 16:10

Carissimi, ho usato questo codice per azionare alcune Macro in automatico:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("AQ4").Value <> "" Then
    ActiveSheet.Range("$A$4:$DO$1005").AutoFilter Field:=43, Criteria1:="<>"
    MsgBox "... e click su Help"
End If
End Sub

Ma MsgBox si ripresenta quando aziono un'altra macro che cancella la cella AQ4.
Esiste la possibilità di togliere il ripetersi di questo messaggio?
Grazie per l'attenzione
scanacc
Utente Senior
 
Post: 171
Iscritto il: 06/12/15 10:30

Sponsor
 

Re: Stop a Macro azionata da altra Macro

Postdi scanacc » 18/04/18 16:19

Tra parentesi volevo dirvi che ho messo il messaggio "... e click su Help" perchè se inserisco Application.Run "HELP", excel va in palla e si riavvia mannaggia
scanacc
Utente Senior
 
Post: 171
Iscritto il: 06/12/15 10:30

Re: Stop a Macro azionata da altra Macro

Postdi Anthony47 » 19/04/18 16:44

Per capire perche' Excel va in palla se inserisci Application.Run "HELP" all'interno della tua macro di Worksheet_Change devi tener presente che la Worksheet_Change si avvia tutte le volte che il foglio a cui si riferisce la Worksheet_Change subisce una modifica, anche via macro.
La cosa piu' probabile e' che la tua "HELP" modifica il foglio, quindi la Worksheet_Change riparte, quindi la HELP viene rilanciata, e modifica il foglio, quindi la Worksheet_Change riparte, quindi la HELP viene rilanciata.... (lascio a te contnuare la tiritera).

Fortunatamente Excel dispone di una istruzione che blocca il rilevamento degli "eventi"; quindi dovresti per cominciare modificare in
Codice: Seleziona tutto
If Range("AQ4").Value <> "" Then
    ActiveSheet.Range("$A$4:$DO$1005").AutoFilter Field:=43, Criteria1:="<>"
    Application.EnableEvents=False
    Application.Run "HELP"
    Application.EnableEvents=True
End If

Inoltre sarebbe anche utile che quella parte di codice scatti solo in alcune circostanze, cosa che si ottiene verificando se la cella modificata corrisponde a un qualche indirizzo o intervallo specifico . Ad esempio:
Codice: Seleziona tutto
If Target.Address = "$AQ$4" Then           'se la cella modificata e' AQ4, allora...
    If Range("AQ4").Value <> "" Then
        ActiveSheet.Range("$A$4:$DO$1005").AutoFilter Field:=43, Criteria1:="<>"
        Application.EnableEvents = False
        Application.Run "HELP"
        Application.EnableEvents = True
    End If
End If
La verifica da fare pero' la devi decidere tu che conosci la struttura del foglio e l'automazione complessiva da realizzare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 16687
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Evitare Macro di Worksheet_Change

Postdi scanacc » 20/04/18 01:11

Come sempre perfetto!
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$AQ$4" Then
If Range("AQ4").Value <> "" Then
    ActiveSheet.Range("$A$4:$DO$1005").AutoFilter Field:=43, Criteria1:="<>"

    Application.EnableEvents = False
    Application.Run "HELP"
    Application.EnableEvents = True
End If
End If
End Sub

Sei un mito
scanacc
Utente Senior
 
Post: 171
Iscritto il: 06/12/15 10:30


Torna a Applicazioni Office Windows


Topic correlati a "Evitare Macro di Worksheet_Change":


Chi c’è in linea

Visitano il forum: raimea e 15 ospiti