E' POSSIBILE USARE VARI COLORI SU UNA STESSA STRINGA ???

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
shadi1978
00martedì 20 settembre 2016 17:21
Ciao,

mi spiego meglio: eseguito un codice ottengo alla fine una stringa composta come segue A-B-C-D (può essere una qualsiasi combinazione delle 4 variabili)

vorrei ottenere: A(rosso)-B(blu)-C(giallo)-D(verde) ossia la stringa con ciascuna parola scritta con un colore diverso

ho provato con il seguente codice ma da errore 448:

If Cells(X, 1) = "A-B-C-D" Then
Cells(X, 1).Characters(Start:=1, LENGHT:=3).Font.ColorIndex = 42
Cells(X, 1).Characters(Start:=5, LENGHT:=4).Font.ColorIndex = 10
End If

X è il n° riga che è variabile

Cosa mi consigliate di fare?
Grazie mille
GiuseppeMN
00martedì 20 settembre 2016 18:12
Buona sera, Shadi;
se fossi sicuro che il Record avesse la stessa struttura:
- 1Carattere-1Carattere-1Carattere-1Carattere
la soluzione sarebbe piuttosto semplice:
Sub Macro_pg()
    ActiveCell.Select
    With ActiveCell.Characters(Start:=1, Length:=1).Font
        .Color = -16776961
    End With
    With ActiveCell.Characters(Start:=3, Length:=1).Font
        .Color = -4165632
    End With
    With ActiveCell.Characters(Start:=5, Length:=1).Font
        .Color = -11480942
    End With
    With ActiveCell.Characters(Start:=7, Length:=1).Font
        .Color = -16711681
    End With
End Sub

ma, per esperienza, ritengo che poi mi diresti che la struttura potrebbe essere;
- "n"Caratteri-"n"Caratteri-"n"Caratteri-"n"Caratteri
O mi sbaglio?

In questo caso la storia si complica.



Giuseppe

shadi1978
00martedì 20 settembre 2016 18:16
n caratteri no

però sono così

A=3
B=3
C=2
D=4
shadi1978
00martedì 20 settembre 2016 18:28
l'ho provato e funziona, però così le parole cambiano di volta in volta i colori.

A(rosso)-B(blu)-C(giallo)-D(verde)

se la combinazione diventasse:
A-C sarebbe A(rosso)-C(blu) o
B-D sarebbe B(rosso)-D(blu)

invece io vorrei associare un colore fisso ad ogni parola, in base a qualsiasi combinazione esca, le parole dovrebbero sempre avere lo stesso colore.

Non so se mi sono spiegato bene

grazie
GiuseppeMN
00martedì 20 settembre 2016 18:29
In tal caso, il Codice VBA proposto, dovrebbe funzionare.

Considera solo che i quattro colori proposti sono rispettivamente:
-   Rosso
-   Blu
-   Verde
-   Giallo
colori che potrai variare tranquillamente a Tuo piacere; devi solo adattare il CodiceColore alla Tua scelta.

Credo che il Ciclo per tutte le Celle sia abbastanza intuitivo (For Next oppure, se le Celle sono contigue senza Celle vuote, Do While; in questo caso risparmi una Variabile); se lo ritieni utile e necessario, possiamo approfondire.



Buona serata.

Giuseppe


Edit: leggo solo ora la Tua Risposta #4; devo pensare a come risolvere, ma, temo che la questione si complichi.
        Sarebbe utile un File, senza dati sensibili, con alcune Celle con Valori significativi colorati.

federico460
00martedì 20 settembre 2016 23:22
ciao

questo è quello che cerchi?
oppure devi colorare la parola completa
questa colora il carattere.


Private Sub Worksheet_Change(ByVal Target As Range)
For I = 1 To Len(Target)
ColVar = 1
If Asc(Mid(Target, I, 1)) - 97 < 55 Then ColVar = Asc(Mid(Target, I, 1)) - 66 '<<< lettere a-z
If Asc(Mid(Target, I, 1)) - 65 < 30 Then ColVar = Asc(Mid(Target, I, 1)) - 62 '<<< lettere A-Z
If Asc(Mid(Target, I, 1)) - 48 < 10 Then ColVar = Asc(Mid(Target, I, 1)) - 2 '<<< numeri 0-9
Target.Characters(Start:=I, Length:=1).Font.ColorIndex = ColVar
Next I
End Sub



da gestire le celle che vuoi coinvolgere
questa vale per tutto il foglio
shadi1978
00mercoledì 21 settembre 2016 09:33
Grazie Federico460, ma non conosco questa funzione e non riesco a farla girare

Grazie GiuseppeMN, in allegato il file
dodo47
00mercoledì 21 settembre 2016 10:39
Ciao
Chiedo scusa a Giuseppe (cari saluti) se mi intrometto, ma solo per non fare lavori a vuoto.

Shadi non fornisci corrette informazioni se la colonna da colorare è la C (SHIPPER).

Questo perché ti è stato chiesto:

"...- "n"Caratteri-"n"Caratteri-"n"Caratteri-"n"Caratteri..."

e tu hai risposto: "..n caratteri no..." invece è si.

Inoltre, poiché conosco quel foglio, se aggiungi un altro trasportatore, la colonna potrebbe contenere 5 valori da colorare e se ne aggiungi un altro 6 valori ecc ecc.

Infine non è chiaro se vuoi assegnare gli n colori sulla base della sigla del trasportatore (quindi per ese. tutti i DHL rossi - tutti i TRMC verdi ecc), oppure il 1° (qualsiasi sia) rosso, il 2° (qualsiasi sia) verde ecc.

Io credo che sia il 1° caso, cioè tutti i DHL con lo stesso colore, tutti i TRMC con lo stesso colore ecc..ecc

Precisa meglio

saluti
GiuseppeMN
00mercoledì 21 settembre 2016 11:28
Buona giornata, Domenico;
leggerti è sempre un grande piacere.

@ dodo47, scrive:


Shadi non fornisci corrette informazioni se la colonna da colorare è la C (SHIPPER).
Questo perché ti è stato chiesto:
"...- "n"Caratteri-"n"Caratteri-"n"Caratteri-"n"Caratteri..."
e tu hai risposto: "..n caratteri no..." invece è si.



Domenico, c'è un'altro problema; ho cercato di analizzare i valori in Colonna "C" e ho notato che non c'è congruenza.
Voglio dire, non è che che una stringa abbia sempre lo stesso colore.
Nell'immagine in allegato ho cercato di concretizzare quanto sopra.


@ shadi1978
A questo punto, per poter gestire questa nuova situazione, è necessario analizzare ogni stringa e valutare se è riferita ad un solo Vettore (DHL, NW, SDB, TRMC).
In questo caso assegnare ad ogni stringa il colore assegnato a quel Vettore.
Se la stringa contiene più Vettori, colorare:
- il I° Vettore di Rosso
- il II° Vettore di Blu
- il III° Vettore di Verde
- il IV° Vettore di Giallo
Questo non credo sia veramente complicato.

Spero di essermi spiegato.


A disposizione

Buona serata.

Giuseppe
shadi1978
00mercoledì 21 settembre 2016 11:50
Grazie a tutti per le risposte.

Infatti mi sono spiegato male Dodo: ho risposto no alla domanda n-caratteri, perchè intendevo che non sono sempre variabili, ma ogni stringa a n°caratteri predefinito...

Cerco di spiegarmi meglio, allora io vorrei che la stringa risultante sia composta sempre con i seguenti abbinamenti:
-SDB rosso
-DHL blu
-NW verde
-TRMC giallo

nella stringa risultante la posizione dei trasportatori è sempre la stessa,di seguito es.nel caso in cui ci siano tutti e 4 oppure sdb e nw siano assenti:
1° SDB rosso o es. assente
2° DHL blu o es. 1°
3° NW verde o es. assente
4° TRMC giallo o es. 2°

In futuro, come accennava Dodo, probabilmente verranno inseriti 1 o altri 2 trasportatori: xxx rosa, yyy arancione

Grazie mille

dodo47
00mercoledì 21 settembre 2016 13:32
@Giuseppe

nella colonna C possono apparire tutti e 4 i trasportatori oppure 1 oppure 2 ecc (separati da "-")

L'ordine in cui appaiono non sempre lo stesso, perché se un trasportatore non viene estratto, non c'è.

Quindi se in effetti l'ordine è:
SDB-DHL-NW-TRMC
è vero che il primo è SDB, ma se non ci fosse:
DHL-NW-TRMC
il primo sarebbe DHL

Pertanto le combinazioni sono molteplici:
SDB
SDB-DHL
SDB-DHL-NW
SDB-DHL-NW-TRMC
DHL
DHL-TRMC
NW
NW-TRMC

ECC ECC

Da quel che ho capito, shadi vuole sempre (se presenti)
-SDB rosso
-DHL blu
-NW verde
-TRMC giallo (il giallo sul bianco si vede male shadi)

(prego shadi di confermare)

saluti e..buon lavoro [SM=x423035]
shadi1978
00mercoledì 21 settembre 2016 14:17
Esatto Domenico, spiegato molto meglio di me... Grazie

I colori che ho segnato sono arbitrari, nel codice ci sono i colori che verranno utilizzati:

If sh1.Cells(X, 3) = "SDB" Then sh1.Cells(X, 3).Font.ColorIndex = 41
If sh1.Cells(X, 3) = "DHL" Then sh1.Cells(X, 3).Font.ColorIndex = 9
If sh1.Cells(X, 3) = "NW" Then sh1.Cells(X, 3).Font.ColorIndex = 25
If sh1.Cells(X, 3) = "TRMC" Then sh1.Cells(X, 3).Font.ColorIndex = 10

Grazie
GiuseppeMN
00mercoledì 21 settembre 2016 16:47
Buona sera, Domenico;
quello che scrivi mi era abbastanza chiaro, con il prospetto che ho proposto in risposta #9 cercavo di evidenziare le incongruenze.
Ad esempio, nelle righe nelle quali "DHL" è riportato singolarmente, viene evidenziato in Rosso
Nelle righe nelle quali "DHL" appartiene ad un gruppo di Vettori non segue più questa regola; in Riga 39 la striga non rispetta questa regola.
DHl è in seconda posizione ed è evidenziato in BLU.

Nel Foglio di lavoro "TOP PRICES", in Riga 39, la stringa SDB-DHL-NW-TRMC viene rappresentata così:
-    SDB        Rosso
-    DHL        Blu
-    NW        Verde
-    TRMC    Giallo
mentre mi sarei aspettato:
-    SDB        Azzurro
-    DHL        Rosso
-    NW        Viola
-    TRMC    Verde

Considerando che i Vettori vengono rappresentati con stringhe di diversa lunghezza, credo che il Codice VBA debba essere piuttosto strutturato.
Quando vai a scomporre le stringhe contenenti più Vettori non sai mai quale e in quale posizione un Vettore potrebbe essere riportato.

Se ritieni di poter proporre una Tua Soluzione sarò ben felice di imparare nuove tecniche; io alzo bandiera bianca.  


Un caro saluto e ... buon Lavoro      

Giuseppe
dodo47
00mercoledì 21 settembre 2016 19:35
@Giuseppe
sei un grande sfaticato....(leggi parac....)!!!!
nel file che ti ha inviato shadi c'è quello che lui attualmente ha, no quello che vuole e che tu hai capito benissimo. [SM=x423045]


@shadi
Allego file.
Nel modulo1 dove c'è la "tua" macro Sub CONFRONTA() ho inserito all'inizio la variabile Public ElabInt As Boolean, che, nel caso tu non abbia codificato nella macro Sub ColoraStringa(...) il trasportatore ed il relativo colore, blocca l'elaborazione.

Tale sub viene chiamata da quella principale (CONFRONTA) verso la fine, vedi istruzione contrassegnata da '>>>>>>>>>>>>>>>

ColoraStringa sh1.Cells(X, 3), Sg '>>>>>>>>>>>>>>>

che passa alla sub che colora la cella da analizzare ed il valore della stringa (Sg).

Se vuoi renderla autonoma fai tu.

La sub che colora funziona nel seguente modo:
a parte lo split della stringa, carica in un array la posizione dei trattini "-" quindi si conosce quanto sono lunghe le relative sub-stringhe facendo la differenza tra le posizioni (A - Da).

Spero che non sia fiato sprecato!

saluti
shadi1978
00giovedì 22 settembre 2016 11:17
FORSE ORA E' FINITO IL PROGRAMMA, SOLAMENTE GRAZIE AL VS AIUTO!!!, a meno che non mi venga in mente di aggiugerci qlcs altro.... [SM=x423029] [SM=x423026]

Ora test massivo e poi vi dirò se funziona perfettamente, a prima occhiata pare di sì.... [SM=x423069]

GRAZIE ANCORA XK HO IMPARATO UN SACCO DI COSE NUOVE SU VBA, ORA CONTINUERO' A SMANETTARCI SPERANDO DI IMPARARE AD USARLO ALMENO IN PARTE [SM=x423024] [SM=x423051]

Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 15:58.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com