|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, in un foglio di lavoro ho assegnato ad un range (S2:S22) una formattazione condizionale relativa a valori duplicati (la formula è =$S$2:$S$22 e segnalazione con cella colorata) per cui se un codice viene scritto in quel range per più di una volta la cella si colora di rosso. Fino a qui tutto bene. Il mio problema nasce quando devo cancellare uno o più codici della parte alta del range (es. i cod. in S2, S3, S4) e tagliare la parte rimanente (S5÷S22) per incollarla partendo da cella S2: nelle rimanenti celle S20÷S22 viene tagliata anche la formattazione condizionale e tali celle ridiventano neutre... Non ho trovato nulla di risolutivo, ma penso che la soluzione sia annidata in una macro di tipo Private Sub da scrivere in un modulo del foglio di lavoro in cui essa debba lavorare, solo che non conosco la sintassi per scrivere quel codice. L'intuizione è corretta, o c'è un'altra soluzione al mio problema? Grazie assai e buona giornata eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve mi pare di aver già trattato questo argomento (mantenimento di un range selezionato nel caso di aggiunta righe) in questo caso, simile, basta affidarsi ad una macro automatica che memorizza in una variabile il range oggetto di formattazione condizionale, toglie la vecchia formattazione e la reinserisce dopo aver eseguito il taglia/copia/incolla. un esempio: Private Sub Worksheet_Change(ByVal Target As Range) Set miorange = Range("S2:S22") With miorange .FormatConditions.Delete .FormatConditions.AddUniqueValues .FormatConditions(miorange.FormatConditions.Count).SetFirstPriority .FormatConditions(1).DupeUnique = xlDuplicate End With With miorange.FormatConditions(1).Interior .Color = 3 End With Set miorange = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, la tua memoria non t'inganna ;-)) infatti per tentare di risolvere il problema attingevo (con le mie limitate nozioni in questo ambito... molto simili a quelle di un pitecantropo :-)) ) a quel caso specifico, ma non riuscivo a scrivere il codice in modo corretto: Range("S2:S22").Select Selection.FormatConditions.AddUniqueValues Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).DupeUnique = xlDuplicate With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Ad onore del vero avevo cercato di dare un range multiplo all'istruzione, anziché limitarsi alla col.S... Range("M2:M22,O2:O22,Q2:Q22,S2:S22"), ma non riusciva a risolvere... stassera, con calma, me la riguardo e cercherò di capire i miei errori :-)) Grazie assai, buona giornata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
ho dimenticato di inserire il codice da cui attingevo: Private Sub Worksheet_Change(ByVal Target As Range) Range("Riferimento1").Interior.ColorIndex = xlNone With ActiveWorkbook.Worksheets("FR-F").Names("Riferimento1") .RefersTo = "='FR-F'!$B$13:$B$17" End With Range("Riferimento1").Interior.ColorIndex = 46 End Sub Non riuscivo a inserire correttamente il testo della macro in questa, e probabilmente gli errori li facevo in questa fase. Ciao e Grazie
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Ecco il report: L'errore era tutto e solo mio... dato che dovevo far lavorare la macro in varie colonne (ciascuna colonna indipendente dalle altre) avevo creato per ciascuna colonna una macro del tipo Private Sub Worksheet_Change(ByVal Target As Range) solo che pensavo di diversificare ciascuna macro in base al range... e quindi Private Sub Worksheet_Change_1(ByVal Target As Range) Set miorange1 = Range("M2:M22") Private Sub Worksheet_Change_2(ByVal Target As Range) Set miorange2 = Range("O2:O22") Private Sub Worksheet_Change_3(ByVal Target As Range) Set miorange3 = Range("Q2:Q22") etc.
In realtà il tutto avrebbe dovuto girare sotto la stessa istruzione (Private Sub Worksheet_Change(ByVal Target As Range) )
Inoltre ho dovuto modificare l'istruzione .Color = 3 in .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 perché la macro, in caso di valore duplicato, mi restituiva la cella nera e non rossa (boh?? il 3 è il codice del rosso... il VBA ieri aveva la luna storta?? :-)) ) Ad ogni modo ora funziona tutto a merviglia, ma di sicuro senza l'aiuto di a10n11 anche stavolta sarei ancora lì a capire come fare. Grazie infinite, buon pomeriggio eZio
|
|
Guest |