|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, devo risolvere questo problema: se in in uno o più fogli di un file excel vi sono delle celle colorate di rosso (ColorIndex 3), colorare la linguetta del relativo foglio di verde (ColorIndex 10). Attualmente svolgo questo lavoro manualmente, ma sicuramente istruendo una macro si riesce ad essere velocissimi e precisi. Cercando in rete non ho trovato il minimo indizio che mi possa aiutare... Grazie assai, buona giornata eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve prova questa: Sub ColoraLinguetta() Dim ws As Worksheet For n = 1 To Worksheets.Count With Sheets(n) Set Rng = .Range("a1").CurrentRegion For Each cl In Rng If cl.Interior.ColorIndex = 3 Then .Tab.Color = 255 Exit For End If Next End With Set Rng = Nothing Next End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, come sempre la tua immediata disponibilità è lodevole (dico unica). La macro gira senza restituire nessun errore, ma non colora la lingiuetta del foglio in cui c'è la cella colorata di rosso ColorIndex 3. Non riesco a capirne il motivo, perché i riferimenti che hai dato sono generali, quindi dovrebbe essere contemplata anche la situazione del file processato... Provo a fare altri tentativi, con altri file; se vi sono novità posto l'esito. Grazie assai, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, come sempre la tua immediata disponibilità è lodevole (dico unica). La macro gira senza restituire nessun errore, ma non colora la lingiuetta del foglio in cui c'è la cella colorata di rosso ColorIndex 3. Non riesco a capirne il motivo, perché i riferimenti che hai dato sono generali, quindi dovrebbe essere contemplata anche la situazione del file processato... Provo a fare altri tentativi, con altri file; se vi sono novità posto l'esito. Grazie assai, buona serata eZio salve quando parli di colore intendi lo sfondo o il colore del bordo? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: quando parli di colore intendi lo sfondo o il colore del bordo?
lo sfondo della cella, quello che si ottiene nella barra multifunzione con Home > Carattere > Colore riempimento (icona della latta di vernice che sta versando colore). Credo che Interior.ColorIndex = 3 sia il codice giusto. Nel frattempo sto provando con altri file, ma non succede nulla, né viene restituito alcun errore. Non riesco a capirne il motivo, dato che- nonostante io sia solo alle primissime armi- intuisco che la sintassi che hai usato è come un passepartout, non dà riferimenti definiti di un Range che eventualmente, se non rispettato, fa inceppare il lavoro della macro. Grazie assai, buona serata eZio EDIT. una domanda, molto probabilmente sciocca: -in For Each cl In Rnghai precedentemente definito il Rng, ma cl lavora anche se non gli dai una definizione? -In base alla tabella redatta dalla sub ShowColor (che mi hai scritto in un precedente 3d) il verde ColoIndex10 equivale a 32768, che non vedo scritto nella macro, come non vedo alcun riferimento alla linguetta del foglio... (scusa assai la mia profonda ignoranza in materia)
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao,
EDIT. una domanda, molto probabilmente sciocca: -in For Each cl In Rng hai precedentemente definito il Rng, ma cl lavora anche se non gli dai una definizione? -In base alla tabella redatta dalla sub ShowColor (che mi hai scritto in un precedente 3d) il verde ColoIndex10 equivale a 32768, che non vedo scritto nella macro, come non vedo alcun riferimento alla linguetta del foglio... (scusa assai la mia profonda ignoranza in materia)
salve il range "Rng" è stato definito con "currentRegion" a partire dalle cella A1 supponendo che fosse l'nizio della tabella. Infatti l'oggetto currentRegion delimita un range racchiuso tra righe e colonne vuote. Probabilmente la tua tabella parte altrove. per aggirare l'ostacolo, basta cambiare CurrentRegion con UsedRange che prende tutto quanto è inserito nel foglio. pertanto: Sub ColoraLinguetta() Dim ws As Worksheet For n = 1 To Worksheets.Count With Sheets(n) Set Rng = .UsedRange Rng.Select For Each cl In Rng If cl.Interior.ColorIndex = 3 Then .Tab.Color = 255 Exit For End If Next End With Set Rng = Nothing Next End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, You're The Better (absolute). Tutto a posto. ;-)) Dato che la macro restituiva Errore alla riga Rng.Select forse perché nei fogli vi sono diverse tabelle (come si può vedere anche nel file esempio), prima di disturbarti ancora mi sono permesso di dare un'ulteriore "aggirata d'ostacolo", alla Ulisse per intenderci:
Sub zColoraLinguetta() Dim ws As Worksheet For n = 1 To Worksheets.Count With Sheets(n) Cells.Select Set Rng = .UsedRange '-------------Rng.Select For Each cl In Rng If cl.Interior.ColorIndex = 3 Then .Tab.Color = 32768 Exit For End If Next Range("A1").Select End With Set Rng = Nothing Next End Sub
in tal modo prima seleziono tutta l'area del foglio e poi, quando ha finito il lavoro, seleziono la cella A1 (ora tutto gira bene, ma se ho commesso un'asinata correggimi!!)
Grazie infinite, come sempre problema risolto brillantemente. Buona serata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, You're The Better (absolute). Tutto a posto. ;-)) Dato che la macro restituiva Errore alla riga Rng.Select forse perché nei fogli vi sono diverse tabelle (come si può vedere anche nel file esempio), prima di disturbarti ancora mi sono permesso di dare un'ulteriore "aggirata d'ostacolo", alla Ulisse per intenderci:
Sub zColoraLinguetta() Dim ws As Worksheet For n = 1 To Worksheets.Count With Sheets(n) Cells.Select Set Rng = .UsedRange '-------------Rng.Select For Each cl In Rng If cl.Interior.ColorIndex = 3 Then .Tab.Color = 32768 Exit For End If Next Range("A1").Select End With Set Rng = Nothing Next End Sub
in tal modo prima seleziono tutta l'area del foglio e poi, quando ha finito il lavoro, seleziono la cella A1 (ora tutto gira bene, ma se ho commesso un'asinata correggimi!!)
Grazie infinite, come sempre problema risolto brillantemente. Buona serata, eZio
Salve l'istruzione Rng.Select è un residuo non tolto quando ho provato la macro. Non serve. Va in errore perchè con il comando With si relazionano i fogli non attivi mentre il comando Select presume che il foglio su cui si lavora sia attivo. Le istruzioni che hai aggiunto Cells.Select e Range("A1").select non servono a nulla perche essendo all'interno dell'istruzione with senza il (.) iniziale, operano solo sul foglio attivo. Anche in questo caso se avessi messo il (.) iniziale sarebbe an dato in errore. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Grazie della spiegazione. Ho immediatamente rimediato alla mia asinata :-))))) Grazie assai, buon pomeriggio eZio
|
|
Rank: Newbie
Iscritto dal : 9/10/2014 Posts: 1
|
Buongiorno, Ho una tabella Excel 2010 con molti fogli, avrei bisogno di una macro che mi colora la linguetta del foglio attivo solo se modifico almeno 1 cella Grazie mille!
|
|
Guest |