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

[Excel 2007]- cella $B$14 deve rimanere colorata anche se si aggiungono righe Opzioni
aetio
Inviato: Tuesday, March 27, 2012 6:21:02 PM

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
Sponsor
Inviato: Tuesday, March 27, 2012 6:21:02 PM

 
a10n11
Inviato: Tuesday, March 27, 2012 8:17:02 PM

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









aetio
Inviato: Tuesday, March 27, 2012 11:52:43 PM

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
a10n11
Inviato: Wednesday, March 28, 2012 9:58:36 AM

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

aetio
Inviato: Wednesday, March 28, 2012 10:59:57 AM

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



a10n11
Inviato: Wednesday, March 28, 2012 12:04:51 PM

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

aetio
Inviato: Wednesday, March 28, 2012 1:32:14 PM

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
aetio
Inviato: Wednesday, March 28, 2012 2:10:41 PM

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
a10n11
Inviato: Wednesday, March 28, 2012 8:07:24 PM

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

aetio
Inviato: Wednesday, March 28, 2012 8:39:36 PM

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
a10n11
Inviato: Wednesday, March 28, 2012 9:28:27 PM

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




aetio
Inviato: Thursday, March 29, 2012 7:51:44 AM

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 Sub

elimino i codici
x = Range("Riferimento1").Rows.Count
e
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"!! :)))
a10n11
Inviato: Thursday, March 29, 2012 9:18:52 AM

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

aetio
Inviato: Thursday, March 29, 2012 9:32:16 AM

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
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.