Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Macro per colorare linguetta foglio se... Opzioni
aetio
Inviato: Tuesday, January 14, 2014 11:51:21 AM

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
Sponsor
Inviato: Tuesday, January 14, 2014 11:51:21 AM

 
a10n11
Inviato: Tuesday, January 14, 2014 3:48:40 PM

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

aetio
Inviato: Tuesday, January 14, 2014 4:12:52 PM

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
a10n11
Inviato: Tuesday, January 14, 2014 5:31:23 PM

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

aetio
Inviato: Tuesday, January 14, 2014 5:57:13 PM

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 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)
a10n11
Inviato: Tuesday, January 14, 2014 7:19:14 PM

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


aetio
Inviato: Tuesday, January 14, 2014 8:38:42 PM

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
a10n11
Inviato: Wednesday, January 15, 2014 11:58:06 AM

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


aetio
Inviato: Wednesday, January 15, 2014 1:21:25 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Grazie della spiegazione. Ho immediatamente rimediato alla mia asinata :-)))))
Grazie assai, buon pomeriggio
eZio
llionello
Inviato: Wednesday, September 10, 2014 11:34:47 AM
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 d'oh!
Grazie mille!
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.