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