Macro VBA não está respondendo a Mudanças na Segmentação de Dados na Pasta de Trabalho do Excel

Anônima
2024-01-15T17:16:22+00:00

Atualmente, estou enfrentando um problema com uma macro VBA no Excel. Na minha pasta de trabalho, tenho uma macro projetada para ser acionada sempre que houver alterações nos dados de uma Segmentação de Dados. O objetivo é usar a função Workbook_SlicerChange para atualizar uma célula específica com base na presença de filtros ativos. No entanto, parece que a macro não está sendo acionada conforme esperado quando interajo com os dados da Segmentação.

Aqui está uma breve visão geral da estrutura da minha pasta de trabalho: Tenho uma Segmentação de Dados na planilha 'DRE TOTAL', enquanto a tabela dinâmica está na planilha 'Tabela Fonte', e a macro destina-se a responder às alterações nesta Segmentação.

Aqui está um trecho do código VBA que estou usando:

vbaCopy codePrivate Sub Workbook_SlicerChange(ByVal SlicerCache As SlicerCache)
' Atualiza a célula B3 na planilha 'DRE TOTAL' com 1 se houver filtros ativos, 0 se não houver
ThisWorkbook.Sheets("DRE TOTAL").Range("B3").Value = IIf(ExistemFiltrosAtivos(), 1, 0)
End Sub

Function ExistemFiltrosAtivos() As Boolean
' Verifica se há filtros ativos em todas as Segmentações de Dados na planilha 'DRE TOTAL'
Dim slicer As SlicerCache
Dim wsDRE As Worksheet

' Define a planilha onde estão as Segmentações de Dados
Set wsDRE = ThisWorkbook.Sheets("DRE TOTAL")

' Itera por todas as Segmentações de Dados na planilha 'DRE TOTAL'
For Each slicer In wsDRE.SlicerCaches
If slicer.VisibleSlicerItems.Count < slicer.SlicerItems.Count Then
ExistemFiltrosAtivos = True
Exit Function ' Sai do loop se encontrar qualquer filtro ativo
End If
Next slicer

' Se não houver filtros ativos em nenhuma Segmentação de Dados, retorna Falso
ExistemFiltrosAtivos = False
End Function

Eu ficaria muito grato por qualquer insights ou sugestões sobre por que a macro não está respondendo às alterações na Segmentação de Dados conforme esperado. Obrigado!

Microsoft 365 e Office | Excel | Para empresas | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

2 respostas

Classificar por: Mais útil
  1. Anônima
    2024-01-16T17:12:14+00:00

    Já avancei no código, porém ainda não está funcionando corretamente.

    Agora ele sempre imprime 0 quando há alguma alteração na segmentação de dados. Antes nunca imprimia nada em momento algum. Conseguimos um avanço. Porém o que preciso é que, quando nenhum filtro estiver selecionado ele imprima 0, quando algum filtro estiver selecionado ele imprima 1.

    O código tá assim:

    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    ' Atualiza a célula B3 na planilha 'DRE TOTAL' com 1 se houver filtros ativos, 0 se não houver

    ThisWorkbook.Sheets("DRE TOTAL").Range("B3").Value = IIf(ExistemFiltrosAtivos(), 1, 0)

    End Sub

    Function ExistemFiltrosAtivos() As Boolean

    ' Verifica se há filtros ativos em qualquer das Segmentações de Dados especificadas

    Dim slicer As slicer

    Dim slicerNames As Variant

    Dim name As Variant

    ' Define os nomes das Segmentações de Dados

    slicerNames = Array("Descr Un Analítica", "Un resumo", "Un gestor", "Un Operação")

    ' Itera por cada nome de Segmentação de Dados

    For Each name In slicerNames

    On Error Resume Next ' Ignora erros

    Set slicer = ActiveWorkbook.Slicers(name)

    On Error GoTo 0 ' Para de ignorar erros

    ' Verifica se a Segmentação de Dados existe

    If Not slicer Is Nothing Then

    ' Verifica se há filtros ativos na Segmentação de Dados

    If slicer.SlicerCache.VisibleSlicerItems.Count < slicer.SlicerCache.SlicerItems.Count Then

    ExistemFiltrosAtivos = True

    Exit Function ' Sai do loop se encontrar qualquer filtro ativo

    End If

    End If

    Next name

    ' Se não houver filtros ativos em nenhuma Segmentação de Dados, retorna Falso

    ExistemFiltrosAtivos = False

    End Function

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2024-01-15T17:42:16+00:00

    O Doug, da equipe da Microsoft Community, me mandou um e-mail, o qual não consegui responder de volta no e-mail dele. Então vou colar minha resposta com mais detalhes aqui:

    Olá, Doug! Tudo bem com você?

    Muito obrigado pela atenção e pela rapidez.

    O meu problema, como descrevi na pergunta, é sobre uma macro que estou tentando fazer com a ajuda do ChatGPT para executar uma tarefa muito simples automaticamente. Tudo que quero é que:

    A partir de um “trigger”, seja ele um “filtro” ou “limpar filtro” na segmentação de dados, automaticamente o Excel retorne em determinada célula da planilha o valor 1 ou 0, para informar se há algum filtro selecionado ou se não há nenhum filtro selecionado.

    Eu cheguei a um código com a ajuda do GPT (o qual colei na pergunta), porém não funcionou, e eu não encontro mais onde possa estar o erro.

    Qualquer informação adicional que você precisar para me ajudar a resolver este problema, por favor, deixe-me saber.

    Atenciosamente,

    Bigodudo

    Esta resposta foi útil?

    0 comentários Sem comentários