Come richiamare una macro all'immissione di dati in certe celle

Anonimo
2010-12-14T11:35:58+00:00

Salve, sto utilizzando questo codice per lanciare la macro "Sollecito_Pagamenti" quando cambio un dato nella cella $E$2. Utilizza l'evento Change del foglio interessato:

Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Address = "$D$2" Then

        Call Sollecito_Pagamenti

    End If

End Sub

Ora avrei bisogno di estendere il numero di celle che l'evento change deve controllare a 4 celle diverse, e precisamente: "$D$1"  "$D$2"  "$F$2"  "$G$2"

Per quanti tentativi e ricerche in guida e NG abbia fatto, non son riuscito a risolvere il problema.

Qualcuno mi aiuta? Grazie

Fabrizio

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2010-12-14T13:24:16+00:00

Salve, sto utilizzando questo codice per lanciare la macro "Sollecito_Pagamenti" quando cambio un dato nella cella $E$2. Utilizza l'evento Change del foglio interessato:

Private Sub Worksheet_Change(ByVal Target As Range)

 

 If Target.Address = "$D$2" Then

        Call Sollecito_Pagamenti

    End If

End Sub

Ora avrei bisogno di estendere il numero di celle che l'evento change deve controllare a 4 celle diverse, e precisamente: "$D$1"  "$D$2"  "$F$2"  "$G$2"

Per quanti tentativi e ricerche in guida e NG abbia fatto, non son riuscito a risolvere il problema.

Qualcuno mi aiuta? Grazie

Fabrizio

Prova:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range

    Set rng = Me.Range("D1:D2,F2,G2")

    If Not Intersect(Target, rng) Is Nothing Then

        If Target.Cells.Count = 1 Then

            If Len(Target.Value) > 0 Then

                MsgBox "Ciao"

            End If

        End If

    End If

    Set rng = Nothing

End Sub

che tiene conto anche del numero di celle selezionate e della possibilità che tu annulli il contenuto della cella *senza* laciare la macro. Qui la chiamata alla macro è sostituita da una MsgBox. Fai sapere, grazie.


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-12-14T15:07:20+00:00

    ho modificato così ... ho fatto bene?

    Dim rng As Range

        Set rng = Me.Range("D1:D2,F2,G2")

        If Not Intersect(Target, rng) Is Nothing Then

            If Target.Cells.Count = 1 Then

                     Call NomeMiaMacro

            End If

        End If

        Set rng = Nothing

    Comunque, risolto. Perfetto e gentile come sempre, grazie

    La tua routine richiama la macro quale sia il cambiamento fatto in una delle 4 celle, purchè sia selezionata una sola cella. Quest'ultima condizione, la lascierei. Quindi va bene.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-12-14T14:58:56+00:00

    Ciao e grazie per la risposte. Il tuo codice ovviamente funziona perfettamente, ma a me serve che lanci la macro anche se cancello una cella in cui avevo un valore, o faccio annulla per ripristinare un valore precedente, per cui ho modificato così ... ho fatto bene?

    Dim rng As Range

        Set rng = Me.Range("D1:D2,F2,G2")

        If Not Intersect(Target, rng) Is Nothing Then

            If Target.Cells.Count = 1 Then

                     Call NomeMiaMacro

            End If

        End If

        Set rng = Nothing

    Avevo anche pensato ad una cella di appoggio del tipo A1=D1&D2&F2&G2 che avesso pertanto un risultato differente qualsiasi modifica riguardasse le quattro celle in questione, per poi *puntarci* l'evento Change con:

    Private Sub Worksheet_Change(ByVal Target As Range)

     If Target.Address = "$A$1" Then

            Call NomeMiaMacro

        End If

    End Sub

    ma mi sembra di avere capito che l'evento Change non funziona su celle risolte da formule.

    Comunque, risolto. Perfetto e gentile come sempre, grazie

    Ciao

    Fabrizio

    La risposta è stata utile?

    0 commenti Nessun commento