Acquista i nostri libri consigliati su Amazon.it
Discussione chiusa
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

[VBA Excel] evidenziare righe e colonne con VBA senza perdere la formattazione

  1. #1
    stige non  in linea Scolaretto
    Ciao a tutti, ho un grosso file di Excel con molte righe e molte colonne, ho trovato questa piccola funzione che inserita nel codice VBA del foglio mi consente di evidenziare riga e colonna ma che purtroppo cancella la formattazione pre esistente.

    il codice che ho trovato questo:
    Dim OldX
    Dim OldY
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If OldX > 0 Then
    Range("A:A").Offset(0, OldX - 1).Interior.ColorIndex = xlNone
    Range("1:1").Offset(OldY - 1, 0).Interior.ColorIndex = xlNone
    End If
    OldX = Target.Column
    OldY = Target.Row
    Range("A:A").Offset(0, OldX - 1).Interior.ColorIndex = 36
    Range("1:1").Offset(OldY - 1, 0).Interior.ColorIndex = 36
    End Sub
    perfetto se si riuscisse a non perdere la formattazione e meglio ancora se, sulla riga selezionata, la formattazione esistente fosse messa in risalto, ma forse chiedo troppo..

    ciao a tutti.

  2. #2
    L'avatar di dragone bianco
    dragone bianco non  in linea Amanuense
    Ciao stige

    il codice da te postato non fa altro che colorare una colonna e una riga per evidenziare la cella selezionata
    ora che formattazioni hai tu?
    il codice cancella il colore standard Impostato per sostituirlo con il colore di selezione
    Ora se tu hai una tabella a pi colori la cosa si complica
    deci ripristinare i colori di base, memorizzare i colori delle celle a cui modifichi il colore, modificare il colore
    oppure potresti usare un formattazione condizionale, che viene inserita e tolta da codice
    ciao
    ℹ️ Leggi di pi su dragone bianco ...

  3. #3
    stige non  in linea Scolaretto
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao stige

    il codice da te postato non fa altro che colorare una colonna e una riga per evidenziare la cella selezionata
    ora che formattazioni hai tu?
    il codice cancella il colore standard Impostato per sostituirlo con il colore di selezione
    Ora se tu hai una tabella a pi colori la cosa si complica
    deci ripristinare i colori di base, memorizzare i colori delle celle a cui modifichi il colore, modificare il colore
    oppure potresti usare un formattazione condizionale, che viene inserita e tolta da codice
    ciao
    Ti ringrazio Dragone, sempre gentilissimo e disponibilie.

    purtroppo, girando sia qui che su altri forum ho visto che non vi soluzione a questo problema o meglio, solo soluzioni parziali.
    peccato perch da come ho avuto modo di vedere questo un problema molto sentito al punto che lo si pu a pieno titolo definire un "bug" di excel.

    grazie ancora

    ciao

  4. #4
    L'avatar di dragone bianco
    dragone bianco non  in linea Amanuense
    le soluzioni si trovano

    questo un esempio usando la formattazione condizionale
    Dim OldX
    Dim OldY
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Celle As String
    
    If OldX > 0 Then
        'elimino formattazione condizionale
        Range("A:A").Offset(0, OldX - 1).FormatConditions.Delete
        Range("1:1").Offset(OldY - 1, 0).FormatConditions.Delete
    End If
        'Calcolo le colonne
        OldX = Target.Column
        OldY = Target.Row
        
        Celle = Range("A:A").Offset(0, OldX - 1).Address(RowAbsolute:=False, columnAbsolute:=False)
        Celle = Celle & "," & Range("1:1").Offset(OldY - 1, 0).Address(RowAbsolute:=False, columnAbsolute:=False)
        
        'imposto la formattazione condizionale
        Range(Celle).FormatConditions.Add Type:=xlExpression, Formula1:="=1=1"
        Range(Celle).FormatConditions(1).Interior.ColorIndex = 36
    End Sub
    
    la formattazione condizionale che creo da codice sempre vera (la formula che uso 1=1)
    la sua caratteristica di non modificare il formato originale
    quindi quando io elimino la formattazione condizionale il formato preesistente riappare
    ti allego un piccolo esempio
    Nota ho solo adattato il tuo codice.
    Ciao
    File allegati File allegati
    ℹ️ Leggi di pi su dragone bianco ...

  5. #5
    L'avatar di MaurizioBruni
    MaurizioBruni non  in linea Scribacchino
    Quote Originariamente inviato da stige Visualizza il messaggio
    lo si pu a pieno titolo definire un "bug" di excel.
    perch un bug? Casomai potrebbe essere una prestazione da aggiungere nella wish-list di mamma microsoft
    Comunque, se ti salvi le formattazioni esistenti in tutte le celle e poi le ripristini (sic!) non mi pare ci siano problemi

    Dragone bianco ti ha dato un buon consiglio, ma il problema solo spostato al fatto che ora ad essere eliminata una eventuale formattazione condizionale...

    Potresti semplificare evidenziando solo la cella corrente e poi ripristinandone le formattazioni.
    Per salvare le formattazione potresti fare copia/incolla formati in un foglio di comodo...
    ℹ️ Leggi di pi su MaurizioBruni ...

  6. #6
    stige non  in linea Scolaretto
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    le soluzioni si trovano

    questo un esempio usando la formattazione condizionale
    Dim OldX
    Dim OldY
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Celle As String
    
    If OldX > 0 Then
        'elimino formattazione condizionale
        Range("A:A").Offset(0, OldX - 1).FormatConditions.Delete
        Range("1:1").Offset(OldY - 1, 0).FormatConditions.Delete
    End If
        'Calcolo le colonne
        OldX = Target.Column
        OldY = Target.Row
        
        Celle = Range("A:A").Offset(0, OldX - 1).Address(RowAbsolute:=False, columnAbsolute:=False)
        Celle = Celle & "," & Range("1:1").Offset(OldY - 1, 0).Address(RowAbsolute:=False, columnAbsolute:=False)
        
        'imposto la formattazione condizionale
        Range(Celle).FormatConditions.Add Type:=xlExpression, Formula1:="=1=1"
        Range(Celle).FormatConditions(1).Interior.ColorIndex = 36
    End Sub
    
    la formattazione condizionale che creo da codice sempre vera (la formula che uso 1=1)
    la sua caratteristica di non modificare il formato originale
    quindi quando io elimino la formattazione condizionale il formato preesistente riappare
    ti allego un piccolo esempio
    Nota ho solo adattato il tuo codice.
    Ciao
    dragone sei un mito, effettivamente la cosa funziona.

    Ho visto che se applico un ulteriore formattazione alla cella selezionata questa viene tenuta ma non evindenziata finch nella selezione.

    Se invece di colorare la riga e la colonna si mettesse in evidenza solo il bordo ? si potrebbe visualizzare la cella anche quando questa viene formattata ...

    ammetto per di non essere in grado di farlo e un tuo ulteriore aiuto mi sarebbe provvidenziale.


    Maurizio,
    l'idea di utilizzare dei fogli "temporanei" buona ma fortunatamente su quel foglio non ho formattazioni condizionali e indubbiamente risolvere quel problema tornerebe utile a molti altri che come me sono abbastanza limitati con vba.

  7. #7
    stige non  in linea Scolaretto
    Scusatemi, a volte sono cos "gnucco" da non rendermene conto... pastrugnando un poco ho trovato una soluzione che mi pare buona, l'unico problema che non riesco a tirare via per la selezione orizzontale i bordi laterali e per quella verticale i bordi superiori e inferiori.

    questo quanto sono riuscito a fare grazie allo splendido lavoro di Dragone

    Dim OldX
    Dim OldY
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Celle As String

    If OldX > 0 Then
    'elimino formattazione condizionale
    Range("A:A").Offset(0, OldX - 1).FormatConditions.Delete
    Range("1:1").Offset(OldY - 1, 0).FormatConditions.Delete
    End If
    'Calcolo le colonne
    OldX = Target.Column
    OldY = Target.Row

    Celle = Range("A:A").Offset(0, OldX - 1).Address(RowAbsolute:=False, columnAbsolute:=False)
    Celle = Celle & "," & Range("1:1").Offset(OldY - 1, 0).Address(RowAbsolute:=False, columnAbsolute:=False)

    'imposto la formattazione condizionale
    Range(Celle).FormatConditions.Add Type:=xlExpression, Formula1:="=1=1"
    Range(Celle).FormatConditions(1).Borders.LineStyle = xlContinuous
    Range(Celle).FormatConditions(1).Borders.Color = RGB(255, 0, 0)
    End Sub
    Se poi si riuscisse anche a far s che le righe utilizzate per evidenziare non vengano stampate, sarebbe davvero il top.

    Ciao

  8. #8
    L'avatar di dragone bianco
    dragone bianco non  in linea Amanuense
    puoi usare un artificio
    usa una cella dove metti il numero 1 (se la cella ha il numero 1) attiva la formattazione condizionale altrimenti la disattiva (cos quando devi stampare devi solo impostare quella cella la puoi cancellare
    Vedi esempio
    Ciao
    Ultima modifica di dragone bianco; 16-12-2010 10:18  Motivo: Eliminato File con Bug
    ℹ️ Leggi di pi su dragone bianco ...

  9. #9
    stige non  in linea Scolaretto
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    puoi usare un artificio
    usa una cella dove metti il numero 1 (se la cella ha il numero 1) attiva la formattazione condizionale altrimenti la disattiva (cos quando devi stampare devi solo impostare quella cella la puoi cancellare
    Vedi esempio
    Ciao
    non funziona, mi dice errore di run time 1004

    anzi, lo da anche il mio di codice, se apro il tuo prova e modifico il codice funziona, dopo averlo salvato e chiuso alla riapertura mi da lo stesso errore 1004.


    ciao

  10. #10
    L'avatar di dragone bianco
    dragone bianco non  in linea Amanuense
    Ciao
    Il problema sta nel fatto che stato salvata la formattazione condizionale
    basta toglierla
    sarebbe da inserire un codice che all'apertura verifica ed elimina le formattazioni condizionali
    ti allego il file funzionante
    File allegati File allegati
    ℹ️ Leggi di pi su dragone bianco ...

Discussione chiusa
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Unione celle exce senza perdere testo
    Da simogio nel forum Microsoft Excel
    Risposte: 12
    Ultimo Post: 22-06-2013, 18:23
  2. Risposte: 11
    Ultimo Post: 02-05-2013, 20:48
  3. Requery maschera senza perdere il focus sul record corrente
    Da e.manfredi nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 08-03-2013, 12:43
  4. Excel: da 150 righe e 13 colonne a 600 righe e 4 colonne!
    Da martina_locatelli nel forum Microsoft Excel
    Risposte: 8
    Ultimo Post: 15-11-2012, 08:03
  5. Modifiche all'editor vba senza perdere dati
    Da VisitorsVBA nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 29-10-2006, 00:13