Como dar à guia da planilha uma cor se o intervalo de células contiver texto

0

Eu tentei código que eu encontrei no SE, e em outros lugares, mas eles não estão funcionando como eu acho que podem. Vou listá-los abaixo. Estou quase certo de que esta é uma pergunta fácil.

O que estou tentando fazer: Se em qualquer uma das células no intervalo A2: A100 houver qualquer texto ou número, então torne a guia da planilha amarela. E precisarei fazer isso em mais de 20 guias.

Os problemas que tive com outro código: Até onde eu sei, eles exigem que você edite uma célula e, em seguida, pressione rapidamente para entrar novamente. Eu tentei SHIFT + F9 para recalcular, mas isso não teve efeito, pois acho que isso é apenas para fórmulas. O código 1 parece funcionar, embora tenha que inserir manualmente o texto novamente, mas não importa qual valor de cor, sempre obtenho uma cor de tabulação preta.

Código que tentei:

Código 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

Código 2: Isto é de um stackoverflow , embora eu tenha modificado um pouco o código para atender às minhas necessidades. Especificamente, se no intervalo definido não houver valores para deixar a cor da guia sozinha e, caso contrário, alterá-la para o valor de cor 6. Mas tenho certeza de que fiz algo errado, não estou familiarizado com a codificação 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

Obrigado pela sua ajuda!

    
por rebluriast 13.04.2015 / 02:40

2 respostas

0

Em ambos os casos, você usa range.text , que é uma variável de string, dá apenas o texto na primeira célula do intervalo, você precisa de um código um pouco mais complexo. Se eu entendi bem, você só quer testar se você cruzar não está em branco e não está interessado no conteúdo. Aqui estão algumas dicas para definir seus critérios:

  • use a função worksheet para obter o número de células não vazias: worksheetfunction.counta("A2:A100")>0

  • ou vá para a próxima célula não vazia no seu intervalo usando o método end() .

por 13.04.2015 / 06:04
0

Você pode precisar usar o seguinte evento:

Private Sub Worksheet_Change(ByVal Target As Range)

Em vez de:

Worksheet_Calculate()

Se você tiver o código em Worksheet_Calculate , ele poderá não ser executado se a planilha não precisar ser recalculada (ou seja, não houver células com fórmulas na planilha)

Cole isso na janela de código das planilhas necessárias para:

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

Isso usa a função COUNTBLANK , que é descrita aqui .

Você também pode usar o código abaixo:

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

Isso usa a função COUNTA descrita aqui

As fórmulas COUNTBLANK e COUNTA podem parecer o oposto uma da outra. No entanto, existem duas diferenças que notei:

  • COUNTBLANK conta as células que têm uma fórmula, que não retorna nenhum valor como em branco. COUNTA contaria que essa célula não está em branco. Um exemplo simples dessa fórmula seria: =IF(1=1,"","test") . Essa fórmula é avaliada para não retornar nenhum valor.

  • COUNTA suporta intervalos não contíguos de células. COUNTBLANK não.

Para atualizar as cores das guias quando a pasta de trabalho estiver aberta:

Você pode ter o mesmo código acima dentro da função Worksheet_Change e Worksheet_Calculate de cada seção do código da planilha.

OU você pode adicionar o seguinte à janela de código da pasta de trabalho :

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
    
por 13.04.2015 / 06:34