O Excel VBA é recalculado em todas as planilhas quando aberto e a tabulação é alterada

0

Eu tenho 13 planilhas com 12 delas para cada mês. Há uma célula em cada uma das 12 folhas com o nome do mês.

Eu recebi um script VBA para testar se o mês atual corresponde à célula e alterar a cor da guia de acordo, mas isso requer um cálculo na planilha para atualizar.

Private Sub Worksheet_Change(ByVal Target As Range)
If Format(Date, "MMMM") = Range("E3").Value Then
    Me.Tab.ColorIndex = 10
Else
    Me.Tab.ColorIndex = xlColorIndexNone
End If
End Sub

Se eu parar de atualizar a planilha do mês passado e passar para a próxima planilha, ambas as guias serão destacadas porque a planilha anterior não foi atualizada. Eu só quero que a planilha atual do mês seja destacada.

Existe uma maneira de recalcular todas as planilhas na planilha aberta e na mudança de tabulação?

    
por gavsiu 11.10.2016 / 01:19

2 respostas

0

No módulo ThisWorkbook , basta colocar

Option Explicit

Private Sub Workbook_Open()
    Dim mySheet As Worksheet
    For Each mySheet In ThisWorkbook.Sheets
        If mySheet.Cells(3, 5).Value = Format(Date, "MMMM") Then
            mySheet.Tab.ColorIndex = 10
        Else: mySheet.Tab.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

Agora, não é necessário calcular nada e apenas verificar todas as folhas sempre que for aberto.

    
por 12.10.2016 / 14:24
0

Sim. No VB Editor, vá para o objeto ThisWorkbook. Na parte superior da janela de código, você verá uma caixa suspensa que diz "(Geral)" ou "Pasta de trabalho". Se estiver escrito "(Geral)", abra a lista suspensa e escolha "Pasta de trabalho". Pode também inserir um novo sub para você imediatamente; se isso acontecer, basta apagar isso.

Agora, no canto superior direito, você tem outro menu suspenso que provavelmente diz "Abrir". Use o menu suspenso para escolher "Abrir" e, novamente, escolha "Ativar Folha". Isso deve inserir duas novas sub-rotinas em sua janela de código - Workbook_Open e Sheet_Activate . Observe que você deseja criar esses usando os menus suspensos, não apenas digitando os nomes - eles podem não funcionar corretamente se você simplesmente os digitar.

Agora você pode colocar qualquer código que desejar nesses subs e o código será executado quando detectar o evento em questão (ou seja, abrir a pasta de trabalho ou selecionar qualquer planilha). A estrutura exata que você solicitou se pareceria com algo assim:

Private Sub Workbook_Open()
    Application.Calculate
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.Calculate
End Sub

Não estou dizendo que essa é a maneira mais eficiente de fazer isso, mas isso deve responder à sua pergunta.

    
por 11.10.2016 / 15:13