Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por SandroLima
#49407
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
Você não está autorizado a ver ou baixar esse anexo.
Por eduardogrigull
Posts
#49442
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
Por SandroLima
#49445
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.
Por eduardogrigull
Posts
#49448
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
Avatar do usuário
Por Jimmy
Avatar
#49465
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
Avatar do usuário
Por Jimmy
Avatar
#49466
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
Por SandroLima
#49492
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.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord