|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, so già che mi prenderò una bella strigliata (meritata!!) perché sono sicuro che l'argomento è già stato affrontato parecchie volte...ma non sono riuscito a trovare la soluzione al mio problema, nonostante abbia cercato parecchio anche in rete, fuori dal mitico e ineguagliabile Forum di Aiutamici. Devo far mantenere- sempre- la cella B14 colorata anche dopo l'aggiunta di una o più righe più in alto... ho provato con la formattazione condizionale dando riferimenti assoluti alla cella ($B$14), ma quando aggiungo una riga la cella ex B14, che diventa B15, porta con sé il colore... Qual'è la soluzione? Grazie assai e buona serata, eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve in maniera molto artigianale..! Presupposto per il funzionamento della macro: Assegna un nome alla cella B14 es "Riferimento" poi copia la macro nel modulo del foglio interessato (nell'esempio "Foglio1") aggiungendo o eliminando righe l'evento change esegue la seguente macro: che cancella il colore della cella spostata, lo riassegna alla cella F14 e riporta il riferimento del nome alla cella F14 Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento").Row Cells(x, 6).Interior.ColorIndex = xlNone Cells(14, 6).Interior.ColorIndex = 3 ActiveWorkbook.Names.Add Name:="riferimento", RefersTo:="=Foglio1!$F$14" End Sub Provala se va bene saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, non avevo dubbi che l'unico che mi avrebbe potuto risolvere il problema fossi Tu!! :))) La macro funziona alla perfezione, ma solo per una volta. Se aggiungo un'altra riga mi compare l'errore Errore di run-time '1004' Metodo 'Range' dell'oggetto '_Worksheet' non riuscito l'istruzione che si colora di giallo è x = Range("Riferimento").Row Non riesco a capirne il motivo... perché aggiungendo un'altra riga il riferimento è comunque stato istruito a puntare sempre alla cella B14 Grazie assai, buona notte eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve l'errore che mostri nasce dal fatto che non ritrova la corrispondenza del nome assegnato alla cella. E' strano perchè l'ho provata è funziona senza problemi. Tuttavia, proviamo a modificare il codice evitando di ricreare il nome ma cambiandoli solo il riferimento di cella (forse anche più logico e corretto) Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento").Row Cells(x, 6).Interior.ColorIndex = xlNone Cells(14, 6).Interior.ColorIndex = 3 With ActiveWorkbook.Names("riferimento") .RefersTo = "=Foglio1!$F$14" End With End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, purtroppo mi dà ancora errore...
Ecco la procedura che seguo: 1) nel foglio di lavoro (che è il Foglio8) seleziono la cella B13 (quella che m'interessa mantenere colorata anche dopo l'aggiunta righe sopra a quella cella) e click ds. > Inserisci nome intervallo > nel campo nome scrivo Riferimento1 > nel campo Ambito seleziono il foglio di lavoro (il Foglio8 che ho nominato FR-N) > nel campo Riferito a controllo che vi sia scritto ='FR-F'!$B$13 e poi dò l'OK 2) nella Gestione dei progetti VBA vado nel Foglio8 e nel modulo che compare copio, adattandola, la macro Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento1").Row Cells(x, 2).Interior.ColorIndex = xlNone Cells(13, 2).Interior.ColorIndex = 46 With ActiveWorkbook.Names("Riferimento1") .RefersTo = "=Foglio8!$B$13" End With End Sub
chiudo il tutto e salvo le modifiche.
Quando in riga 3 inserisco una riga la cella B13 si colora, compare l'avviso Errore di run-time '1004' Errore definito dall'applicazione o dall'oggetto in cui l'istruzione evidenziata in giallo è With ActiveWorkbook.Names("Riferimento1") Ho notato che dopo l'inserimento della riga il nome "Riferimento1" non resta agganciato alla cella B13, ma passa alla B14. Grazie assai per la solita infinita (nel vero senso della parola) pazienza Buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve se il nome del foglio è stato rinominato FR-F non puoi richiamarlo con la macro come Foglio8 dato poi che l'assegnazione del nome l'hai fatto per il singolo foglio dovrai modificare la macro come segue: Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento1").Row Cells(x, 2).Interior.ColorIndex = xlNone Cells(13, 2).Interior.ColorIndex = 46 With ActiveWorkbook.Worksheets("FR-F").Names("Riferimento1") .RefersTo = "='FR-F'!$B$13" End With End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, questa Materia è davvero affascinante... non pensavo che il Foglio8 rinominato FR-F, ma riconosciuto comunque come Foglio8(FR-F) nel form dei progetti VBA, necessitasse di un'ulteriore specifica nelle istruzioni della macro!! Durante la mia ricerca "empirica" della possibile soluzione avevo evoluto l'istruzione With ActiveWorkbook.Names("Riferimento1") .RefersTo = "=Foglio8!$B$13" in With ActiveWorkbook.Names("Riferimento1") .RefersTo = "=FR-F!$B$13" ma certamente non pensavo che sarebbe stato necessario un ulteriore approfondimento come questo With ActiveWorkbook.Worksheets("FR-F").Names("Riferimento1") .RefersTo = "='FR-F'!$B$13" in cui Worksheets("FR-F") e 'FR-F' (con gli apici) la facessero da padroni della situazione... (detto tra noi: gli apici in ='FR-F'!$B$13 erano presenti nella stringhetta della window relativa al Nuovo nome da assegnare alla cella, ma qui entra in gioco la "competenza" che mi manca... ) Ora è tutto a posto. Ancora una volta le nostre teste dure (ma sopra tutto le immense competenza e disponibilità di a10n11) hanno avuto ragione sugli eventi... Grazie infinite, buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao,
supponiamo che anziché mantenere colorata solo la cella B13 vi sia la necessità di estendere la proprietà alle celle B14, B15, B16, B17 (Range B13:B17) come andrebbero modificate le istruzioni in seno alla macro?? Durante il movimento a scendere dell'intera tabella, all'inserimento della riga, a questo punto sarebbero 5 le celle (Range B13:B17) il cui colore rimarrebbe ancorato alla loro posizione iniziale... l'unica cosa che riesco ad inquadrare abbastanza bene è che l'istruzione .RefersTo = "='FR-F'!$B$13" dovrebbe diventare .RefersTo = "='FR-F'!$B$13:$B$17" Per il resto è buio pesto... :)
Grazie assai, buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao,
supponiamo che anziché mantenere colorata solo la cella B13 vi sia la necessità di estendere la proprietà alle celle B14, B15, B16, B17 (Range B13:B17) come andrebbero modificate le istruzioni in seno alla macro?? Durante il movimento a scendere dell'intera tabella, all'inserimento della riga, a questo punto sarebbero 5 le celle (Range B13:B17) il cui colore rimarrebbe ancorato alla loro posizione iniziale... l'unica cosa che riesco ad inquadrare abbastanza bene è che l'istruzione .RefersTo = "='FR-F'!$B$13" dovrebbe diventare .RefersTo = "='FR-F'!$B$13:$B$17" Per il resto è buio pesto... :)
Grazie assai, buon pomeriggio eZio salve prova con questa modifica: Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento1").Rows.Count Range("Riferimento1").Interior.ColorIndex = xlNone Range(Cells(13, 2), Cells(13 + x - 1, 2)).Interior.ColorIndex = 46 With ActiveWorkbook.Worksheets("FR-N").Names("Riferimento1") .RefersTo = "='FR-N'!$B$13:$B$17" End With End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, esito: come sempre... PERFETTA!!
commento: potrai anche non credermi, ma te lo giuro, le tue creature mi lasciano estasiato... MAI visto nel web macro di così sommo livello. E parimenti, MAI visto nel web Persona SEMPRE così disponibile e comprensiva... Spesso, quando mi risolvi i problemi, mi torna in mente il capolavoro di Massimo Troisi "Il Postino"... Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve innanzitutto grazie a te per il riscontro che contrariamente ad altri prendono la risposta e non fanno sapere se il loro problema è stato risolto. La macro in questione funziona ma è pittosto grezza, rivedendola, si sarebbe potuto fare a meno di queste righe: x = Range("Riferimento1").Rows.Count Range(Cells(13, 2), Cells(13 + x - 1, 2)).Interior.ColorIndex = 46 e spostare il tutto dopo la riassegnazione del nome al range. Come vedi VBA nella sua semplicità consente vari modi di interpretare il problema raggiungendo sempre lo stesso risultato. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Commenta:Come vedi VBA nella sua semplicità consente vari modi di interpretare il problema raggiungendo sempre lo stesso risultato. ...forse è proprio per questo suo "dinamismo" che VBA mi piace molto... sembra una creatura viva, in un universo parallelo. Resta da definire la scala di lettura della sua... emh... semplicità: un "cavaliere in arme" a cavallo del suo destriero andava a circa 50 km/h... un X-15 andava oltre mach 6 (poco meno di 7.000 km/h) :))) Fatta questa premessa, per confermare quanto ho scritto sopra non ho ben capito il concetto: dalla macro Private Sub Worksheet_Change(ByVal Target As Range) x = Range("Riferimento1").Rows.Count Range("Riferimento1").Interior.ColorIndex = xlNone Range(Cells(13, 2), Cells(13 + x - 1, 2)).Interior.ColorIndex = 46 With ActiveWorkbook.Worksheets("FR-N").Names("Riferimento1") .RefersTo = "='FR-N'!$B$13:$B$17" End With End Subelimino i codici x = Range("Riferimento1").Rows.Counte Range(Cells(13, 2), Cells(13 + x - 1, 2)).Interior.ColorIndex = 46... poi: Commenta:e spostare il tutto dopo la riassegnazione del nome al range. ?? Qui non mi è chiaro il passaggio............ (ecco ricomparire in me il Massimo Troisi "Postino" a cui alludevo sopra...) Grazie assai e buona giornata eZio p.s. per quanto riguarda la macro: alla faccia del "piuttosto grezza"!! :)))
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto: ?? Qui non mi è chiaro il passaggio............
ecco cosa intendevo.. Private Sub Worksheet_Change(ByVal Target As Range) Range("Riferimento1").Interior.ColorIndex = xlNone With ActiveWorkbook.Worksheets("FR-N").Names("Riferimento1") .RefersTo = "='FR-N'!$B$13:$B$17" End With Range("Riferimento1").Interior.ColorIndex = 46 End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, ora mi è chiarissimo... avevo il sentore che il codice che definisce Range e colore andava comunque dichiarato, ma non riuscivo assolutamente a risalire alla sua giusta riscrittura. Forse inconsciamente venivo disorientato da quel "tutto"... :)) Commenta:Come vedi VBA nella sua semplicità consente vari modi di interpretare il problema raggiungendo sempre lo stesso risultato. ...il tuo immenso talento sta proprio qui: nel fare diventare semplice un così complesso e sfaccettato universo come il VBA. GRAZIE di cuore, buona giornata eZio
|
|
Guest |