Come dare un colore al foglio del foglio di lavoro se l'intervallo di celle contiene del testo


0

Ho provato il codice che ho trovato su SE e altrove ma non funzionano come penso possano. Li elenco qui sotto. Sono quasi certo che questa è una domanda facile.

Quello che sto cercando di fare: Se in una delle celle dell'intervallo A2: A100 è presente un testo o un numero qualsiasi, quindi rendere la scheda del foglio di lavoro gialla. E avrò bisogno di farlo su oltre 20 schede.

I problemi che ho avuto con altri codici: Per quanto ne so, richiedono la modifica di una cella, e poi premono di nuovo invio. Ho provato MAIUSC + F9 a ricalcolare, ma questo non ha avuto alcun effetto, poiché penso che sia solo per le formule. Il codice 1 sembra funzionare anche se è necessario reinserire manualmente il testo, ma a prescindere dal valore del colore, ottengo sempre un colore di tabulazione nero.

Codice che ho provato:

Codice 1:

Private Sub Worksheet_Change(ByVal Target As Range)
    MyVal = Range("A2:A27").Text

    With ActiveSheet.Tab
        Select Case MyVal
            Case ""
                .Color = xlColorIndexNone
            Case Else
                .ColorIndex = 6
        End Select
    End With
End Sub

Codice 2: Questo è da a StackOverflow domanda, anche se ho modificato leggermente il codice per adattarlo alle mie esigenze. Nello specifico, se nell'intervallo impostato non ci sono valori per lasciare il colore della scheda da solo, e in caso contrario per cambiarlo con il valore del colore 6. Ma sono sicuro di aver fatto qualcosa di sbagliato, non ho familiarità con la codifica VBA.

Private Sub Worksheet_Calculate()
    If Range("A2:A100").Text = "" Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = 6
    End If
End Sub

Grazie per l'aiuto!

Risposte:


0

In entrambi i casi si usa range.text che è una variabile stringa, ti dà solo il testo nella prima cella dell'intervallo, hai bisogno di un codice un po 'più complesso. Se capisco bene, vuoi solo verificare se incroci non sono vuoti e non sono interessati al contenuto. Ecco alcuni suggerimenti per impostare i tuoi criteri:

  • usa la funzione worksheet per ottenere il numero di celle non vuote: worksheetfunction.counta("A2:A100")>0

  • o vai alla prossima cella non vuota del tuo intervallo usando end() metodo.


0

Potrebbe essere necessario utilizzare il seguente evento:

Private Sub Worksheet_Change(ByVal Target As Range)

Invece di:

Worksheet_Calculate()

Se hai il codice in Worksheet_Calculate, potrebbe non essere eseguito se il foglio di lavoro non ha bisogno di essere ricalcolato (cioè non ci sono celle con le formule nel foglio di lavoro)


Incolla questo nella finestra del codice dei fogli che devi impostare per:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    Set myRange = ActiveSheet.Range("A2:A100")
    If Application.WorksheetFunction.CountBlank(myRange) = 99 Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = vbRed
    End If
End Sub

Questo usa il COUNTBLANK funzione che è descritta Qui .

Puoi anche usare il codice qui sotto:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    Set myRange = ActiveSheet.Range("A2:A100")
    If Application.WorksheetFunction.CountA(myRange) = 0 Then
        ActiveWorkbook.ActiveSheet.Tab.Color = xlColorIndexNone
    Else
        ActiveWorkbook.ActiveSheet.Tab.Color = vbRed
    End If
End Sub

Questo usa il COUNTA funzione descritta Qui


Il COUNTBLANK e il COUNTA le formule potrebbero sembrare l'opposto l'una dell'altra. Tuttavia ci sono 2 differenze che ho notato:

  • COUNTBLANK conta una cella che ha una formula, che non restituisce alcun valore come vuoto. COUNTA conterebbe una cella come non vuota. Un semplice esempio di tale formula sarebbe: =IF(1=1,"","test"). Questa formula valuta in modo che non restituisca alcun valore.

  • COUNTA supporta intervalli di celle non contigui. COUNTBLANK non lo fa.


Per avere i colori della scheda aggiornati quando la cartella di lavoro è aperta:

Puoi avere lo stesso codice sopra dentro ENTRAMBI i Worksheet_Change e Worksheet_Calculate funzione di ciascuna sezione del codice del foglio di lavoro.

O puoi aggiungere quanto segue al finestra del codice della cartella di lavoro :

Private Sub Workbook_Open()
    Call Sheet1.Worksheet_Change(ActiveSheet.Range("A1"))
    Call Sheet2.Worksheet_Change(ActiveSheet.Range("A1"))
    'Add lines of code for each sheet that you need the tab colors updated for. If you need tab colors updated for ALL sheets, you can loop through the sheets and call `Worksheet_Change` as well.
End Sub

Grazie per la risposta. Ho inserito Private Sub Worksheet_Change(ByVal Target As Range) codice, e ha funzionato solo quando ho modificato manualmente una cella nell'intervallo. Non ha modificato automaticamente il colore della scheda all'apertura della cartella di lavoro. Ho anche provato il tuo secondo suggerimento, ma i miei risultati erano gli stessi del primo.
rebluriast

La risposta è stata aggiornata con il codice richiesto per farlo
thilina R

Grazie per questo. I tuoi suggerimenti sono apprezzati. Suppongo che potrei aggiungere il codice a ogni foglio di lavoro, ma ho solo bisogno di coprirlo su tutta la cartella di lavoro. Per questo, qui funziona molto bene: stackoverflow.com/questions/29597474/...
rebluriast
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.