Página 1 de 1

Macro necessita corrigir

Enviado: 19 Out 2019 às 18:03
por SandroLima
Boa tarde, colegas do fórum

Preciso da ajuda dos mestres do VBA nesse momento.

Tenho uma macro que redimensiona a quantidade de linhas das tabelas conforme a quantidade de itens a serem inseridos.
A quantidade de itens a serem inseridos é informada na coluna "Linhas" da tabela "TB_AuxRelMensal" na Aba "RELATORIO MENSAL".

Para efeitos de teste a Planilha tem como Mês de Referência na Aba "RELATORIO MENSAL" o mês de Setembro.

Para observarem o problema apresentado peço que realizem os 2 (dois) testes a seguir:
1) Ao abrir a planilha, na célula C2 da Aba "Relatório Mensal" mudem o Mês de "Setembro" para qualquer outro mês exceto o mês de Outubro.
Percebam que aí acontece o primeiro erro. Qualquer outro mês selecionado (exceto Setembro e Outubro) não possui lançamentos e ele deveria redimensionar a tabela para apenas 1 (uma) linha e exibir a mensagem:
"Não existem lançamentos para o período selecionado".
Se outro mês qualquer for selecionado ele exibe a mensagem mas ainda assim não redimensiona a tabela.
Na sequência do teste voltem a selecionar Setembro... ele exibe a mensagem "Não existem lançamentos para o período selecionado" mesmo havendo itens para o período selecionado.
Na sequência, se for selecionado Setembro novamente ele não exibe a mensagem "Não existem lançamentos para o período selecionado" (correto, como deve acontecer).

NÃO SALVAR A PLANILHA ANTES DE FECHAR PARA O FAZER O SEGUNDO TESTE

2) Ao reabrir a planilha selecione novamente o mês de Setembro que já está selecionado. Ele redimensiona a planilha normalmente (como deveria fazer).
Na sequência do teste, selecionem outro mês qualquer (exceto Outubro) e ele não exibe a mensagem de que não
Porém, se o mesmo mês for selecionado novamente, ele exibe a mensagem corretamente.
Aqui o problema volta a se repetir como no teste acima.
Na sequência do teste voltem a selecionar Setembro... ele exibe a mensagem "Não existem lançamentos para o período selecionado" mesmo havendo itens para o período selecionado.
Na sequência, se for selecionado Setembro novamente ele não exibe a mensagem "Não existem lançamentos para o período selecionado" (correto, como deve acontecer).

Alguém poderia verificar o que deveria ser corrigido nas macros?

Segue planilha para testes.

Obrigado a quem puder colaborar

Re: Macro necessita corrigir

Enviado: 21 Out 2019 às 08:54
por SandroLima
Bom dia, pessoal.

Alguém poderia me ajudar na melhoria/correção dessa rotina?

Macro necessita corrigir

Enviado: 21 Out 2019 às 15:53
por eduardogrigull
Olá... Quem foi que escreveu as fórmulas? É bem difícil chegar do zero e entender completamente, pra mim é mais fácil escrever do zero, ou a pessoa que escreveu corrigir ou explicar direito :D

Re: Macro necessita corrigir

Enviado: 21 Out 2019 às 16:54
por SandroLima
Boa tarde, colega.

Qual fórmula vc se refere? Da célula Q5 da Aba "CONFIG" fui eu.

A fórmula é o resultado da contagem de itens que serão introduzidos na tabela.

Se estiver perguntando do código... foi feito com a ajuda de membros aqui do fórum... claro que já devo ter feito adaptações pois já faz algum tempo. E ele tem apresentado os problemas que relatei no início do tópico.
Se tiver uma alternativa para reescrever a macro é sempre bem vinda... adoro estudar novos códigos.

Basicamente a macro tem a função de pegar a quantidade de itens dos grupos:
Despesas fixas / recorrentes
Despesas ocasionais
Despesas variáveis / temporárias
Antecipações / Pagamentos
que será informada na coluna [Linhas] da tabela "TB_AuxRelMensal" da Aba "RELATORIO MENSAL".

A macro então deve acrescentar (ou excluir, se for o caso) a quantidade de linhas (ou itens) + 1 nas tabelas correspondentes.
a) O número de itens (informado pela coluna [Linhas]) do grupo "Despesas fixas / recorrentes" determinará o número de linhas da tabela "TB_ItensRecorrentes".
b) O número de itens (informado pela coluna [Linhas]) do grupo "Despesas ocasionais" determinará o número de linhas da tabela "TB_ItensOcasionais".
c) O número de itens (informado pela coluna [Linhas]) do grupo "Despesas variáveis / temporárias" determinará o número de linhas da tabela "TB_ItensTemporarios".
d) O número de itens (informado pela coluna [Linhas]) do grupo "Antecipações / Pagamentos" determinará o número de linhas da tabela "TB_AntecipacoesPagamentos".
O número de linhas sempre acrescido de + 1.

Qualquer dúvida estou à disposição.

Macro necessita corrigir

Enviado: 21 Out 2019 às 18:18
por eduardogrigull
O problema está somente na Tabela Auxiliar da planilha "Condomínio". O grande problema é que odeio trabalhar com tabelas no excel... Tem algo dando errado na fórmula das ultimas duas colunas dessa tabela

Re: Macro necessita corrigir

Enviado: 22 Out 2019 às 08:25
por Jimmy
Bom dia Sandro,

Não estudei a planilha a fundo, logo, não estou certo de que o problema é esse que vou indicar. Vou arriscar um palpite.

Vamos olhar pra primeira tabela, pra entender. A quantidade de linhas depende do valor de X9. Se tem 1 linha, dimensiona com 2, se tem zero dimensiona com 1, etc...

Ocorre que esse valor é atualizado apenas após a execução da macro RedimensionaRelMensal, e consequentemente da macro RedimensionaTabela. Assim, o dimensionamento se baseia na quantidade de linhas que o mês anteriormente selecionado deveria ter.

Creio que se você alterar a macro do evento Change da planilha RELATÓRIO MENSAL, de:
Código: Selecionar todos
        RedimensionaRelMensal

        wshCondominio.Range("MesReferencia_Condominio").Value = wshRelMensal.Range("MesReferencia_RelMensal").Value
        wshCondominio.Range("AnoReferencia_Condominio").Value = wshRelMensal.Range("AnoReferencia_RelMensal").Value
para
Código: Selecionar todos
        wshCondominio.Range("MesReferencia_Condominio").Value = wshRelMensal.Range("MesReferencia_RelMensal").Value
        wshCondominio.Range("AnoReferencia_Condominio").Value = wshRelMensal.Range("AnoReferencia_RelMensal").Value
        
        RedimensionaRelMensal
ou seja, passar as duas movimentações para antes da chamada da macro, resolverá. Não sei se trará outras consequências, porque, como comentei, não estudei a planilha.

Outro problema é que a macro RedimensionaRelMensal ´é encerra logo após a mensagem (no caso de tudo zero), usando um Exit Sub, quando deveria continuar para formatar as tabelas com 1 linha ao menos, e não deixa-las com a quantidade de linhas definidas pelo último mês consultado.

Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan

Re: Macro necessita corrigir

Enviado: 22 Out 2019 às 08:39
por Jimmy
Sandro,

Aproveitei e dei uma alterada no leiaute da macro RedimensionaRelMensal, que segue apenas como sugestão.
Código: Selecionar todos
Sub RedimensionaRelMensal()
    
    Dim Tabela As ListObject
    Dim QtdeItens As Long, Idx As Byte

    Application.ScreenUpdating = False
    Calculate
    With wshRelMensal.ListObjects("TB_AuxRelMensal").DataBodyRange
        
        If (.Cells(1, 7).Value + .Cells(2, 7).Value + _
            .Cells(3, 7).Value + .Cells(4, 7).Value) = 0 Then _
            VBA.MsgBox "Não existem lançamentos para o período selecionado", vbExclamation, "Relatório"
    
        For Idx = 1 To 4
            If Idx = 1 Then Set Tabela = wshRelMensal.ListObjects("TB_ItensRecorrentes")
            If Idx = 2 Then Set Tabela = wshRelMensal.ListObjects("TB_ItensOcasionais")
            If Idx = 3 Then Set Tabela = wshRelMensal.ListObjects("TB_ItensTemporarios")
            If Idx = 4 Then Set Tabela = wshRelMensal.ListObjects("TB_AntecipacoesPagamentos")
    
            QtdeItens = .Cells(Idx, 7).Value
            RedimensionaTabela lobTabela:=Tabela, lngQtdeLinhas:=QtdeItens + 1
            'AplicaBordas RNG:=TabelaDestino.DataBodyRange
        Next
    End With
        
    Application.ScreenUpdating = True

    Set Tabela = Nothing
    
End Sub
Se esta mensagem colabora para a solução do problema, peço que dê um Like, clicando no botão com o "positivo", acima e a direita.

Jimmy San Juan

Re: Macro necessita corrigir

Enviado: 22 Out 2019 às 19:15
por SandroLima
Boa noite, usuários e colaboradores do fórum.

Boa noite, Jimmy.
Ocorre que esse valor é atualizado apenas após a execução da macro RedimensionaRelMensal, e consequentemente da macro RedimensionaTabela. Assim, o dimensionamento se baseia na quantidade de linhas que o mês anteriormente selecionado deveria ter.

Creio que se você alterar a macro do evento Change da planilha RELATÓRIO MENSAL
Puxa vida! Matou o problema... era isso mesmo.
Outro problema é que a macro RedimensionaRelMensal ´é encerra logo após a mensagem (no caso de tudo zero), usando um Exit Sub, quando deveria continuar para formatar as tabelas com 1 linha ao menos, e não deixa-las com a quantidade de linhas definidas pelo último mês consultado.
Excelente dica... vou adotar.
Lembro que na época foi uma demanda minha. Sou sempre a favor de diminuir o tempo dos processos... então solicitei que a macro não fizesse nada caso não houvessem lançamentos para o período selecionado.
Mas adotei sua observação.
Aproveitei e dei uma alterada no leiaute da macro RedimensionaRelMensal, que segue apenas como sugestão.
Show de bola... acho bom demais ver variadas formas de escrever... e deu uma enxugada no tamanho da macro.

Mais uma vez me dando aquele apoio.

Muito obrigado novamente.