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.
Por SandroLima
#49004
Boa noite, pessoal

Tenho uma Macro que serve para alimentar uma tabela com itens recorrentes mensais (gastos de condomínio):
Código: Selecionar todos
Sub ImportarItensRecorrentes()
 
    Dim TabelaOrigem As ListObject, TabelaDestino As ListObject, TabelaVencimentos As ListObject
    Dim varDados() As Variant, datData() As Date, varItem() As Variant, curValor() As Currency, varGrupo() As Variant
   
    
    Set TabelaOrigem = wshConfig.ListObjects("TB_ItensCadastrados")
    Set TabelaDestino = wshCondominio.ListObjects("TB_Condominio")
    'Set TabelaVencimentos = wshCondominio.ListObjects("TB_Vencimentos")
    
    TotalLinhas = TabelaOrigem.DataBodyRange.Rows.Count  'Conta o Nº de linhas da tabela de Itens Cadastrados
    TotalColunas = TabelaOrigem.DataBodyRange.Columns.Count 'Conta o Nº de linhas da tabela de Itens Cadastrados
    
   '
'
'
'         
        Call OrdenaCondominio
        Call FormataCondomínio


    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    Set TabelaOrigem = Nothing
    Set TabelaDestino = Nothing
    Erase varDados
    Erase datData
    Erase varItem
    Erase curValor
    Erase varGrupo
    
End Sub
Dentre outras coisas ele serve para formatar e ordenar os itens da tabela de condomínio após serem inseridos.
Essa rotina é executada uma única vez por mês.

Como eu faria para deixar isso de maneira automática?
Ou seja, a cada virada de Mês (todo dia 1º ou a primeira vez que a planilha fosse aberta após essa data) a macro abrisse uma MsgBox com a pergunta:

"Deseja importar os gastos de condomínio do mês atual?"

Se a resposta fosse "não" ela não faria nada e a macro executaria novamente ao abrir a planilha novamente.
Em caso de resposta afirmativa ela executaria a rotina da macro e ficaria inabilitada até a próxima virada do mês quando a planilha fosse aberta pela primeira vez?

Isso é possível?

Agradeço a todos que puderem de alguma forma ajudar.
Por eduardogrigull
Posts
#49005
Por Vba, você pode definir pra aparecer uma mensagem em determinado dia, por exemplo, todos dias 1°. Mas pra planilha abrir automaticamente, sem ser o usuário abrindo-a, teria que adicionar aos serviços do Windows.

Teoricamente, é só por no evento Workbook_Open() o seguinte:
Código: Selecionar todos
Call RotinaMensal
E num módulo:
Código: Selecionar todos
Sub RotinaMensal ()

'Verificar se o último mês foi salvo
If Month(Plan1.Range("A1").Value) = Month(Date) then
       'Ja foi realizado a rotina nesse mês

Else
          
     If MsgBox("Deseja atualizar/salvar?", vbYesNo) = vbYes then
          
             'Salvar data atual na célula
             Plan1.Range("A1").Value = Date

             'SUA ROTINA 

     End if
End if
End sub
Por SandroLima
#49022
Boa tarde.
Por Vba, você pode definir pra aparecer uma mensagem em determinado dia, por exemplo, todos dias 1°.
Mas é isso que preciso... ou na primeira vez que eu abrir a planilha após o dia 1º.
Mas pra planilha abrir automaticamente, sem ser o usuário abrindo-a, teria que adicionar aos serviços do Windows.
Isso não é necessário.


A macro ficou mais ou menos assim:
Sub RotinaMensal()

If wshCondominio.Range("MesReferencia_Condominio").Value = MonthName(Month(Date)) Then
Exit Sub
Else

If MsgBox("Deseja importar os gastos de condomínio do mês atual?", vbYesNo) = vbNo Then

Else
wshCondominio.Range("MesReferencia_Condominio").Value = MonthName(Month(Date))
'Inserir Rotina
Call OrdenaCondominio
End If
End If

End Sub
A princípio atende... mas entendo que pela macro que se o Mês já estivesse alterado para o Mês atual ele deveria encerrar a sub.
Aqui mesmo com o mês atual a macro ainda me pergunta se deseja lançar os gastos do Mês atual.
O que faltou ajustar?

A macro deve executar uma vez ao início de cada virada de mês e perguntar se:

"Deseja importar os gastos de condomínio do mês atual?"

Se a resposta for "não" a macro não faz nada e deve executar novamente ao abrir a planilha na próxima vez caso o mês ainda não tenha sido atualizado na planilha.
Em caso de resposta afirmativa ela executa a rotina da macro e fica inabilitada até a próxima virada do mês quando a planilha for aberta pela primeira vez após a virada do mês.
Por eduardogrigull
Posts
#49028
Olá, eu não tenho acesso a planilha pra confirmar, mas provavelmente está acontecendo o seguinte:

- Voce está comparando os "nomes" de meses, a sua planilha deve usar o português, e no Vba é inglês. Então ele sempre vai executar rotina, já que o valor sempre sera diferente.

Caso nao consiga, anexe a planilha que ficaria mais fácil :D
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