Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

evento change byval

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

evento change byval

Postdi blunotte13 » 27/05/19 21:18

Ciao a tutti, spulciando in giro ho trovato qusta macro che ho provato a modificare
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "b11:b13"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target = "NUMERO" Then Call NUMERO
If Target = "" Then Call canc
If Target = "PARI" Then Call PARI

End If
End Sub


la terza riga non riesco a farla funzionare
Codice: Seleziona tutto
If Target = "PARI" Then Call PARI


è una cosa possibile legare più eventi a più caselle con questo tipo di macro?
Grazie a tutti.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 136
Iscritto il: 13/01/10 19:35

Sponsor
 

Re: evento change byval

Postdi Marius44 » 28/05/19 07:57

Ciao
Suppongo che nelle celle dell'intervallo ci sia scritto NUMERO oppure PARI oppure cella vuota.
Ma sei sicuro che le prime due condizioni funzionino?
Te lo chiedo perchè facendo una prova (ma ho dovuto creare un file nuovo e non so se è uguale al tuo come struttura; in futuro allega sempre il tuo file - senza dati sensibili - sul quale poter lavorare) mi si blocca subito perchè, a mio avviso, la macro dovrebbe essere
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "b11:b13"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
If Target.Value = "NUMERO" Then Call NUMERO
If Target.Value = "" Then Call canc
If Target.Value = "PARI" Then Call PARI

End If
End Sub


Un'altra cosa. E' sempre meglio evitare di dare nomi alle macro con parole riservate di VBA (mi riferisco a canc)
Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 503
Iscritto il: 07/09/15 22:00

Re: evento change byval

Postdi Anthony47 » 28/05/19 11:26

Mario, teoricamente Target e Target.Value sono equivalenti, visto che "Target" e' un Range e la proprieta' di default del range e' "Value"

@blunotte13
Premesso che quel codice richiama le procedure NUMERO, CANC e PARI nei casi in cui una cella (una sola) dell'intervallo B11:B13 venga compilata con la stringa "NUMERO" o con una stringa "vuota" o con la stringa "PARI"

la terza riga non riesco a farla funzionare
Puoi spiegare che cosa fai, cosa succede, cosa ti aspettavi che succedesse?

è una cosa possibile legare più eventi a più caselle con questo tipo di macro?
Puoi descrivere meglio la richiesta?

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

Re: evento change byval

Postdi blunotte13 » 28/05/19 11:35

Grazie della risposta, non ho pensato di allegare il file :D
Non funziona ancora, mi da sempre errore alla stessa riga quando lancio la macro "PARI", allego immagine e file.
Non è niente di importante, provo a simulare una roulette, ciclicamente mi prende la voglia di cimentarmi con excel.

Questo il file

https://www.dropbox.com/s/h2jf3vc5nz6fb ... .xlsm?dl=0

e questa l'immagine

https://www.dropbox.com/s/n2nqzam264fop ... e.jpg?dl=0

Grazie.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 136
Iscritto il: 13/01/10 19:35

Re: evento change byval

Postdi blunotte13 » 28/05/19 11:40

Anthony47 ha scritto:Mario, teoricamente Target e Target.Value sono equivalenti, visto che "Target" e' un Range e la proprieta' di default del range e' "Value"

@blunotte13
Premesso che quel codice richiama le procedure NUMERO, CANC e PARI nei casi in cui una cella (una sola) dell'intervallo B11:B13 venga compilata con la stringa "NUMERO" o con una stringa "vuota" o con la stringa "PARI"

la terza riga non riesco a farla funzionare
Puoi spiegare che cosa fai, cosa succede, cosa ti aspettavi che succedesse?

è una cosa possibile legare più eventi a più caselle con questo tipo di macro?
Puoi descrivere meglio la richiesta?

Ciao


Ho visto solo adesso la tua risposta, mi aspettavo che sarebbe stata lanciata la macro "PARI".

La mia richiesta è : è possibile in un certo range, B11:B13, lanciare diverse macro scegliendo da un elenco convalida dati ? Le macro possono essere lanciate in celle differenti oppure devono essere legate alla cella ?
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 136
Iscritto il: 13/01/10 19:35

Re: evento change byval

Postdi Anthony47 » 28/05/19 13:57

Guarda che la Sub PARI() viene avviata regolarmente; solo che tale macro a sua volta modifica il contenuto della cella che ha avviato la Worksheet_Change, inserendovi una formula sballata (tipo =SE(XFC11=B8;A11*2;"0")), che si traduce in #VALORE e che reinnesca la Sub Worksheet_Change.

Devi quindi controllare il codice della tua Sub PARI()
La riga che produce il risultato sudetto:
Codice: Seleziona tutto
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]=R[-3]C,RC[-1]*2,""0"")"


In linea di massima puo' essere utile bloccare il riconoscimento di ulteriori eventi fino al completamento della Sub Worksheet_Change, usando Application.EnableEvents = False / True. Del tipo
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Cdati = "b11:b13"
If Not Application.Intersect(Target, Range(Cdati)) Is Nothing Then
    Application.EnableEvents = False
        If Target.Value = "NUMERO" Then Call NUMERO
        If Target.Value = "" Then Call canc
        If Target.Value = "PARI" Then Call PARI
    Application.EnableEvents = True
End If
End Sub

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

Re: evento change byval

Postdi blunotte13 » 28/05/19 15:27

Grazie dell'aiuto così capisco dove sbaglio, modifico il file.
Ciao ciao.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 136
Iscritto il: 13/01/10 19:35


Torna a Applicazioni Office Windows


Topic correlati a "evento change byval":


Chi c’è in linea

Visitano il forum: raimea e 31 ospiti