di niente, mi deverte giocare col vba.
![]()
di niente, mi deverte giocare col vba.
![]()
La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
www.beppegrillo.it
Nel fine settimana ho avuto tempo di testarlo e purtroppo il codice non funziona... o meglio funziona se il valore viene cambiato da me:
se c'è 5 e metto 6 il colore diventa verde, se poi metto 4 diventa rosso... e così via
ma se il colore viene cambiato dalla query web il valore ovviamente si aggiorna ma il colore non cambia.
Qualcuno ha qualche idea da suggerire?
Sembra che l'evento change non venga attivato dalla query quindi sono andato a cercare un po' in rete e sull'help di excel e ho trovato l'evento QueryTable.AfterRefresh che sembra quello giusto però non ho modo di provarlo, dovresti fare tu qualche tentativo.
In rete se ne parla qui
http://support.microsoft.com/kb/213187
L'esempio che c'è nell'help è questo
Quindi facendo un mix fra quello che ti ho postato prima e questo, potresti provare qualcosa del genere:codice:Private Sub QueryTable_AfterRefresh(Success As Boolean) If Success ' Query completed successfully Else ' Query failed or was cancelled End If End Sub
Può darsi però che ti dia qualche errore perché non l'ho provato.codice:Private Sub QueryTable_AfterRefresh(Success As Boolean) If Success Set Range_Dati = Range("a1:a100") Set Foglio_Appoggio = Worksheets("Foglio2") Rosso = RGB(255, 70, 94) Giallo = RGB(255, 243, 102) Verde = RGB(0, 242, 61) For Each Casella In Range_Dati If Casella > Foglio_Appoggio.Cells(Casella.Row, Casella.Column) Then Casella.Interior.Color = Verde ElseIf Casella = Foglio_Appoggio.Cells(Casella.Row, Casella.Column) Then Casella.Interior.Color = Giallo Else Casella.Interior.Color = Rosso End If Foglio_Appoggio.Cells(Casella.Row, Casella.Column) = Casella Next End If End Sub
Comunque cominciamo a vedere se facciamo un passo avanti.
La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
www.beppegrillo.it
Grazie per il codice
Allora ho fatto delle prove ma non succede nulla. Di errori non ne da ma non accade nulla sia quando l'aggiornamento viene fatto dalla query sia quando viene fatto manualmente.
Non sono un esperto di VBA quindi chiedo a qualcuno del forum se in grado di darmi una mano![]()
Allora, intanto una precisazione, le query di cui parliamo sono quelle la cui procedura è descritta nel link che ti ho postato (dove c'è tutto l'elenco di punti 1, 2, 3, ... 15), vero?
Se è così la strada dovrebbe essere quella quindi si tratta solo di capire come percorrerla.
Comincia a fare una cosa, metti questa istruzione
come prima istruzione della Sub cioè fra la riga Private ... e la Ifcodice:MsgBox "evento attivato"
e metti quest'altra
fra la If e la prima delle Set.codice:MsgBox "query riuscita"
Queste istruzioni, se eseguite, fanno apparire un piccolo pop-up con scritto il messaggio indicato e servono per capire se l'evento viene attivato e se la query riesce a recuperare dati.
Praticamente, se tutto funzionasse a dovere, nel momento in cui la query viene eseguita dovrebbe partire la Sub e dovrebbe essere subito eseguito il primo msgbox e poi, se la query va bene si dovrebbe entrare nella If e si dovrebbe vedere il secondo pop-up.
Fammi sapere che succede.
Ah, già, non dimenticare di attivare le macro quando apri il foglio (scusa se sottolineo l'ovvio ma a volte si perde tempo per delle sciocchezze)
La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
www.beppegrillo.it
Sicuramente avrò sbagliato qualcosa ma non succede niente
Private Sub QueryTable_AfterRefresh(Success As Boolean)
MsgBox "evento attivato"
If Success
MsgBox "query riuscita"
Set Range_Dati = Range("d2:d10")
Set Foglio_Appoggio = Worksheets("FoglioAppoggio")
Rosso = RGB(255, 70, 94)
Giallo = RGB(255, 243, 102)
Verde = RGB(0, 242, 61)
For Each Casella In Range_Dati
If Casella > Foglio_Appoggio.Cells(Casella.Row, Casella.Column) Then
Casella.Interior.Color = Verde
ElseIf Casella = Foglio_Appoggio.Cells(Casella.Row, Casella.Column) Then
Casella.Interior.Color = Giallo
Else
Casella.Interior.Color = Rosso
End If
Foglio_Appoggio.Cells(Casella.Row, Casella.Column) = Casella
Next
End If
End Sub