› Sviluppare funzionalita su Microsoft Office con VBA › colora cella
-
AutoreArticoli
-
Sub CercaCodice() Dim trovato As Boolean Dim I As Long TextToFind = InputBox("Cosa vuoi cercare?") For I = 1 To Sheets.Count Set ricerca = Sheets(I).Cells.Find(TextToFind, LookIn:=xlValues, LookAT:=xlWhole) If Not ricerca Is Nothing Then Sheets(I).Select ricerca.Activate trovato = True End If Next I If trovato = False Then MsgBox "Codice non trovato!", vbExclamation, "ATTENZIONE!" End If End Sub
ciao a tutti, trovato il valore mi deve colorare o evidenziare la cella..
Grazie
Sheets(I).Cells.Find
E' terribile, in termini di efficienza e performances. La ricerca su *tutte* le celle del foglio occupa risorse e tempo (16384 colonne x 1048576 righe dà un numero che neanche Excel riesce a maneggiare, sono oltre diciassette miliardi di celle 🙂 )
For I = 1 To Sheets.Count
E questa cosa la ripeti per un numero enne di fogli.
Sheets(I).Select ricerca.Activate
Se la ricerca ha esito positivo più volte, non ti accorgerai nemmeno delle prime ricerche positive, perchè lo sfarfallamento sarà continuo, e comunque alla fine avrai solo l'ultimo risultato positivo trovato. Del resto, se ti basta aver successo almeno una volta sola, puoi evitare un sacco di dispendio di energie e tempo uscendo dal ciclo For dopo che "trovato" è diventato True.
si può optare per un'altra soluzione?
Sì, puoi limitare l'area di ricerca ai range che sai contenere il dato da cercare: in quali colonne va cercato? specificalo con Sheets(i).Range(...) invece che con Sheets(i).Cells.
sheets(I).range("A:A").Find(textofind,lookIn:=xlValues,LookAT:=xlWhole) .......
@vecchio frac, così?
perfetto!
E se le zone in cui cercare sono diverse da foglio a foglio puoi anche unirle così:
sheets(I).range("A:A,C:D,F:G").Find(textofind,lookIn:=xlValues,LookAT:=xlWhole)
-
AutoreArticoli