Notifications
Clear all

Erro ao filtrar data em t. Dinamica no PivotItem().Visible

10 Posts
2 Usuários
0 Reactions
2,131 Visualizações
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Estou usando VBA para que o filtro da tabela dinamica seja o valor de uma celula, o código funcionada para qualquer dado exceto datas abreviadas (Ex: 09/12/2014), o erro ocorre ao setar a propriedade .Visible do objeto PivotItem do filtro de Datas da tabela dinamica. Aparece <tipos incompativeis> para a propriedade visible, e não faço idéia do porque, se eu colocar somente a linha ObjectPivotItem("Data").Visible = True também dá erro, mas se ao invés da data abreviada e usar "Mês", o código funciona perfeitamente. Gostaria de saber como posso fazer para corrigir esse erro pois já vasculhei a internet a procura de solução e todos as possíveis soluções não resultaram em sucesso.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 16/01/2015 6:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Sua dúvida ainda não foi resolvida?
viewtopic.php?f=10&t=14098

Postagem cruzada.
http://usuariosdoexcel.forumeiros.com/t ... namica-vba

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/01/2015 9:39 am
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Bom dia!!

Sua dúvida ainda não foi resolvida?
viewtopic.php?f=10&t=14098

Postagem cruzada.
http://usuariosdoexcel.forumeiros.com/t ... namica-vba

Att

A Dúvida viewtopic.php?f=10&t=14098 já foi resolvida. Esse tópico é sobre outro problema.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 16/01/2015 12:07 pm
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Alguém sabe como filtrar data na Tabela Dinamica via célula????

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 19/01/2015 5:11 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Tem como postar seu arquivo modelo?

At

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 19/01/2015 8:50 am
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Adicionei o anexo do arquivo modelo, o código está dentro do objeto Sheet, se vc clicar no botão e selecionar dia 05/01/2015 a dinamica deveria filtrar somente essa data, mas não filtra. Testei com nomes de Meses (Exemplo: Novembro) e o mesmo código funciona perfeitamente.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 21/01/2015 8:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Eu não tive erro, como me parece uma descrição confusa, teste o código abaixo e retorne dizendo se ajudou ou não!

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim pvt As PivotTable
    If Union(Target, Range("C2")).Address = Range("C2").Address Then
        For Each pvt In ActiveSheet.PivotTables
            pvt.PivotFields("Data").CurrentPage = Range("C2").Value
        Next
    End If
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 21/01/2015 11:42 am
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Para mostrar o erro no meu código é só escolher uma data que não existe na base ou então remover o tratamento de erro que coloquei.
O seu código não dá certo porque você está atribuindo a data no filtro da dinâmica, desse jeito a Tabela Dinâmica vai mostrar dados do ultimo registro que filtrou, mostrando no filtro um dia que não existe na Base.
Escolha o dia 06//01/2015 (esse dia não existe na base) e verá que o mesmo será incluído na lista da Dinâmica, mostrando dados que são de outro dia.

Não se pode atribuir um dado para a dinâmica pq dá esse problema, o jeito é comparar a data que vc escolheu com alguma da lista do filtro da dinamica, assim se a mesma existir na lista, vc deverá a propriedade Visible do item como True.

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 21/01/2015 1:59 pm
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Vou tentar com esse código que bolei, acho que agora funciona, o excel trabalha com datas em formato americano (m/d/aaaa) depois posto os resultados:

Dim objPivotField As PivotField
Dim objPivotItem As PivotItem
a = Format(Range("$C$2").Value, "d/m/yyyy")
'Esse código funciona perfeitamente para Mês(Ex: Abril), mas para data abreviada (Ex: 01/01/2015) não funciona
Set objPivotField = ActiveSheet.PivotTables("DinamicaData").PivotFields(Index:="Data")
ActiveSheet.PivotTables("DinamicaData").PivotFields("Data").ClearAllFilters
For Each objPivotItem In objPivotField.PivotItems
If objPivotItem.Name = a Then
'objPivotItem.Visible = True
PobjPivotField.CurrentPage = Range("C2").Value
Else
'objPivotItem.Visible = False
End If
Next objPivotItem

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 21/01/2015 2:29 pm
sagrado7
(@sagrado7)
Posts: 32
Eminent Member
Topic starter
 

Achei a solução pessoal!
Reformulei o código: formato a data como padrão norte americano, comparo a data formatada com a da lista do filtro, se existir eu formato a data para o padrão brasileiro e atribuo a data ao filtro.
Adicionei o anexo com o código pronto e funcionando para quem quiser ver, espero que isso ajude o pessoal que precise trabalhar setando datas abreviadas (dd/mm/aaaa) na Tabela Dinamica por VBA.
Código Funcional:

Dim DataFormatada As Date
Dim objPivotField As PivotField
Dim objPivotItem As PivotItem
DataFormatada = Format(Range("$C$2").Value, "m/d/yyyy")
'Esse código funciona perfeitamente para Mês(Ex: Abril), mas para data abreviada (Ex: 01/01/2015) não funciona
Set objPivotField = ActiveSheet.PivotTables("DinamicaData").PivotFields(Index:="Data")
ActiveSheet.PivotTables("DinamicaData").PivotFields("Data").ClearAllFilters

For Each objPivotItem In objPivotField.PivotItems
If objPivotItem.Name = DataFormatada Then
'objPivotItem.Visible = True
DataFormatada = Format(Range("$C$2").Value, "dd/mm/yyyy")
ActiveSheet.PivotTables("DinamicaData").PivotFields("Data").CurrentPage = Range("C2").Value
Else
'objPivotItem.Visible = False
End If
Next objPivotItem

ActiveSheet.ChartObjects("Gráfico 1").Activate
ActiveChart.ChartTitle.Text = "Data - " & Range("$M$2").Value
If ActiveChart.ChartTitle.Text = "Data - (Tudo)" Then MsgBox "Sem dados para os critérios selecionados", vbInformation, "Atenção"

Conte Comigo!
Profissão: Programador VBA Pleno
"Para bom entendedor, meia palavra basta"

 
Postado : 22/01/2015 6:05 am