Ir ao conteúdo
  • Cadastre-se
Cleomirfl

Excel RESOLVIDO Selecionar linha de datas do dia anterior e enviar por email

Posts recomendados

Bom dia Turma!

 

Estou precisando de uma ajuda em VBA ...seguinte: Tenho uma planilha entitulada RECEBIMENTO DE CALES que detém algumas informações para rastreabilidade, existem datas, cálculos de estadias, descrição do produto e etc...o que preciso é o seguinte: preciso de um código VBA que me permita ao toque de um botão selecionar a linha de preenchimento de datas anteriores e enviar isso por email(Outlook), tenho até um código que faz isso, porém ele seleciona a planilha inteira e envia por email, mas agora preciso enviar somente o dia anterior das informações....

 

 

o código que uso hoje é esse, porém envia a planilha inteira...

 

Sub Send_Range()

'Desprotege a planilha utilizando o password "Senha"
Sheets("RDO - 01").Unprotect "xxxxxx"

      ' Select the range of cells on the active worksheet.
   ActiveSheet.Range("CL01:DA330").Select
   
   ' Show the envelope on the ActiveWorkbook.
   ActiveWorkbook.EnvelopeVisible = True
   
   ' Set the optional introduction field thats adds
   ' some header text to the email body. It also sets
   ' the To and Subject lines. Finally the message
   ' is sent.
   With ActiveSheet.MailEnvelope
      .Introduction = "Informações Apuradas as 06h"
      .Item.To = "Recebimento de Cales"
      .Item.Subject = "Recebimento de Cales - 02/08/2019"
      .Item.Send
      
   
   End With
   
    'Protege novamente a planilha
Sheets("RDO - 01").Protect "xxxxxx"

   
End Sub
 

Recebimento.xlsx

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Cleomirfl disse:

 ... tenho até um código que faz isso, porém ele seleciona a planilha inteira e envia por email, ...

O seu código envia apenas o conteúdo do intervalo CL01:DA330, não envia a planilha inteira.

Ainda, o seu código supostamente atua sobre uma planilha de nome RDO - 01 e no seu arquivo não existe planilha com esse nome.

 

 ... mas agora preciso enviar somente o dia anterior das informações....

Você precisa informar qual o intervalo a ser enviado ou informar em que célula está o "dia anterior" ou você poderá selecionar manualmente o intervalo a ser enviado.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 ... tenho até um código que faz isso, porém ele seleciona a planilha inteira e envia por email, ...

O seu código envia apenas o conteúdo do intervalo CL01:DA330, não envia a planilha inteira.

Ainda, o seu código supostamente atua sobre uma planilha de nome RDO - 01 e no seu arquivo não existe planilha com esse nome.

Sim..a planilha fica inteira nesse intervalo...por isso disse que envia ela toda!!...Sobre o código RDO - 01...isso serve apenas para desbloquear e bloquear a guia de nome RDO - 01...

 

 ... mas agora preciso enviar somente o dia anterior das informações....

Você precisa informar qual o intervalo a ser enviado ou informar em que célula está o "dia anterior" ou você poderá selecionar manualmente o intervalo a ser enviado.

Justamente isso que preciso, porém os dias anteriores não são fixos...pois a programação de carregamento difere de um dia para o outro, por isso não consigo especificar o intervalo(..o motivo de enviar ela inteira)...

 

Preciso de um código que busque justamente a data do dia anterior...conseguiu entender?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, Cleomirfl disse:

 ... a planilha fica inteira nesse intervalo...

O seu conceito de "planilha inteira" é diferente do significado real ;)

 

Sobre o código RDO - 01...isso serve apenas para desbloquear e bloquear a guia de nome RDO - 01...

Não faz sentido colocar um comando para desbloquear uma planilha que não existe. 😕

Ainda, esse comando irá provocar Erro em tempo de execução - Subscrito fora do intervalo. :confused:

 

Preciso de um código que busque justamente a data do dia anterior...conseguiu entender?

Na sua planilha há datas em várias colunas, então você precisa informar com exatidão:

1. em qual coluna o código irá procurar a tal data do dia anterior

2. haverá uma única célula com a data procurada ?

3. ao encontrar a data procurada qual o intervalo a ser enviado por email ?

4. a expressão "data do dia anterior" requer uma data de referência. Qual é a data de referência ?

Forneça exemplos.

 

 

Sem essas informações eu não consigo lhe ajudar. Conseguiu entender ? ;)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

  Em 23/08/2019 às 22:12, Cleomirfl disse:

 ... a planilha fica inteira nesse intervalo...

O seu conceito de "planilha inteira" é diferente do significado real 

R: Então, o significado real é justamente o que te falei...esse intervalo seleciona essa planilha inteira para enviar por email...justamente porque não consegui selecionar somente uma parte dela para enviar...

 

Sobre o código RDO - 01...isso serve apenas para desbloquear e bloquear a guia de nome RDO - 01...

Não faz sentido colocar um comando para desbloquear uma planilha que não existe. 

Ainda, esse comando irá provocar Erro em tempo de execução - Subscrito fora do intervalo. 

R:...engano seu...não só existe como preciso desse código para desbloquear e bloquear logo em seguida, envio essa guia por email a partir de um botão dessa guia RDO - 01...todas as guias da planilha ficam bloqueadas...

 

Preciso de um código que busque justamente a data do dia anterior...conseguiu entender?

Na sua planilha há datas em várias colunas, então você precisa informar com exatidão:

1. em qual coluna o código irá procurar a tal data do dia anterior?

 

R: Na primeira coluna..de nome  Criação NF...

 

2. haverá uma única célula com a data procurada ?

 

R: Não...porque existem mais datas abaixo da primeira..as vezes existem mais de 10 datas iguais..o que diferem elas são os horário a frente delas...

 

3. ao encontrar a data procurada qual o intervalo a ser enviado por email ?

 

R: Exemplo...se a data estiver na célula A6...ela buscar o intervalo A6:O15...podendo variar...porque poso ter mais ou menos datas lançadas na coluna A...

 

4. a expressão "data do dia anterior" requer uma data de referência. Qual é a data de referência ?

Forneça exemplos.

 

R: A data de referência será sempre a data atual..exemplo: hoje é dia 25/08..quando der o comando ela buscar sempre a data do dia 24/08...

 

OBS: Essa planilha é uma planilha de recebimento de Notas Fiscais...lançadas uma a uma com várias informações sobre ela, podendo variar a quantidade de Notas por dia...por isso estou precisando de um código para isso...pois o cliente não está querendo receber a planilha inteira...quer só as NF dos dia anterior;

 

image.thumb.png.8cd2211171df6d4741ec03110bc67817.png

 

OBS: Como o exemplo acima...quando desse o comando, enviar somente do dia 22/08 para baixo, porém toda a área demarcada em vermelho..que nesse caso seria o intervalo A178:O187...

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com base nos seus comentários me parece que estamos tratando de arquivos diferentes. Assim, tomando como referência o arquivo e o código que você disponibilizou no post #1:

 

6 horas atrás, Cleomirfl disse:

  ...esse intervalo seleciona essa planilha inteira para enviar por email...justamente porque não consegui selecionar somente uma parte dela para enviar...

Conforme comentei antes "O seu código envia apenas o conteúdo do intervalo CL01:DA330, não envia a planilha inteira." Note que a pessoa que elaborou o seu código colocou apropriadamente o nome de Send_Range e não Send_Sheet. Fiz um teste assim: no seu código, esta linha ~~~> ActiveSheet.Range("CL01:DA330").Select eu substitui por esta ~~~>  ActiveSheet.Range("A5:E10").Select, visto que este intervalo contém dados, diferente do intervalo que você colocou no seu código que está vazio, e enviei para o meu email via o seu código. A figura abaixo mostra que o código envia apenas o intervalo indicado (A5:E10) e não a planilha inteira.

image.png.82e430cec747dc85111bd2012c6e4f23.png

Ainda, o seu código utiliza o método MailEnvelope, que é indicado para enviar intervalos, sendo que para enviar planilhas inteiras é utilizado outro método.

 

R:...engano seu...não só existe como preciso desse código para desbloquear e bloquear logo em seguida, envio essa guia por email a partir de um botão dessa guia RDO - 01...

Se o arquivo que você disponibilizou contém uma planilha de nome RDO - 01 então algo estranho acontece ao baixar o seu arquivo pois a tal planilha não chega aqui. Se ao baixar, o arquivo veio por via terrestre, então provavelmente ele caiu do caminhão. Porém se ele veio via aérea, então provavelmente foi abduzido por algum ET. Ou algum Duende tá me sacaneando ... pois tal planilha não aparece aqui. Veja que ela não consta na figura abaixo.

image.png.632ff3e3fc4a03bde96797935b968dc2.png

 

 

 

Experimente o código abaixo.

Para testar alterei as datas no intervalo A178:A187 para 24/8/19 e mantive os horários. Em seguida rodei o código abaixo enviando para o meu email. O resultado é mostrado na figura abaixo. Veja que foi enviado apenas o intervalo de interesse (A5:O5 & A178:O187), conforme o critério adotado.

image.png.8cf131a3d89dcbaf881092521ff6ad12.png

 

Sub EnviaIntervalo()
 Application.ScreenUpdating = False
 With Sheets("RECEBIMENTO DE CALES")
  .AutoFilterMode = False
  .Range("A5:O5").AutoFilter Field:=1, Criteria1:= _
      ">=" & CDbl(Date - 1), Operator:=xlAnd, Criteria2:="<" & CDbl(Date)
  Sheets.Add
  .Range("A5:O" & .Cells(Rows.Count, 1).End(3).Row).Copy [A1]
  .AutoFilterMode = False
 End With
 Columns("A:O").AutoFit
 Range("A1:O" & Cells(Rows.Count, 1).End(3).Row).Select
 ActiveWorkbook.EnvelopeVisible = True
 With ActiveSheet.MailEnvelope
  .Introduction = "Informações Apuradas as 06h"
  .Item.To = "destinatário@xxxx.com.br"   'coloque o destinatário da mensagem
  .Item.Subject = "Recebimento de Cales - 02/08/2019"
  .Item.Send
 End With
 Application.DisplayAlerts = False
 ActiveSheet.Delete
 Application.DisplayAlerts = True
 Application.ScreenUpdating = True
End Sub

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

...cara, acho que me expressei mal...na vdd esse código que uso envia apenas uma guia inteira(..que é essa entitulada - Recebimento de Cal)...Essa planilha que uso é gigante, são mais de 15mb de arquivos, por isso desmembrei somente esta guia...então a guia RDO - 01 não aparece para você(...kkkkkk, a parte do ET e do doende foi D+)...

O botão que coloquei o código fica nessa planilha RDO...por causa de lançamentos atrelados ao controle de processo...aí como não tinha conseguido desenvolver....coloquei um link para transferir tudo que é digitado nessa guia de Recebimento para aparecer na guia de RDO, para poder então enviar(...por isso disse que enviava a planilha toda, mas na realidade é só a guia Recebimento que é enviada)..

 

Agora uma dúvida Osvaldo: Esse código vai separar os intervalos referentes ao dia anterior? Tipo...amanhã dia 26/8 se eu colocar esse código para rodar ele vai puxar somente as datas do dia 25/08 ou os intervalos cadastrados previamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, Cleomirfl disse:

 Tipo...amanhã dia 26/8 se eu colocar esse código para rodar ele vai puxar somente as datas do dia 25/08 ... ?

 

Exatamente, o código irá selecionar e enviar somente os registros que contenham 25/8 na coluna A.

Sugestão, faça o teste no arquivo do post #1 após alterar ou incluir algumas datas 24/8, em quaisquer células da coluna A  e rode o código hoje. Se for testar amanhã, então altere ou coloque datas 25/8.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, coloquei o código para rodar...só apareceu isso...

 

image.thumb.png.993b3d5ab4804d6bcac24cc8efeab65f.png

 

 

adicionado 0 minutos depois
29 minutos atrás, Cleomirfl disse:

Cara, coloquei o código para rodar...só apareceu isso...

 

image.thumb.png.993b3d5ab4804d6bcac24cc8efeab65f.png

 

 

Recebi por email, porém só o cabeçalho..rsrs

adicionado 29 minutos depois

Osvaldo, testei aqui de novo e quase deu certo..rsrs...quando coloco o código para rodar ele primeiro dá erro 400, depois abre uma nova guia e quando retorno para a planilha de recebimento ele está somente filtrada e não seleciona a parte filtrada para enviar por email...sinto que estamos chegando perto...rsrs

adicionado 40 minutos depois
48 minutos atrás, osvaldomp disse:

 

Exatamente, o código irá selecionar e enviar somente os registros que contenham 25/8 na coluna A.

Sugestão, faça o teste no arquivo do post #1 após alterar ou incluir algumas datas 24/8, em quaisquer células da coluna A  e rode o código hoje. Se for testar amanhã, então altere ou coloque datas 25/8.

 

Deu certo por aqui Osvaldo...tava colocando o código no lugar errado..rsrs...obrigado pela paciência e pela força cara...grande abç!!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 25/08/2019 às 17:48, osvaldomp disse:

 

Exatamente, o código irá selecionar e enviar somente os registros que contenham 25/8 na coluna A.

Sugestão, faça o teste no arquivo do post #1 após alterar ou incluir algumas datas 24/8, em quaisquer células da coluna A  e rode o código hoje. Se for testar amanhã, então altere ou coloque datas 25/8.

 

Osvaldo uma última dúvida..rsrs...e se eu quisesse enviar o dia anterior e o atual juntos? Como ficaria o código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

substitua CDbl(Date) por CDbl(Date + 1)

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, osvaldomp disse:

substitua CDbl(Date) por CDbl(Date + 1)

 

Parabéns meu camarada...excelente resultado, tudo funcionando perfeito!!!

Muito Obrigado!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 28/08/2019 às 16:59, osvaldomp disse:

substitua CDbl(Date) por CDbl(Date + 1)

Bom dia Osvaldo, vê se consegue me ajudar aê...depois que passei o sistema de data para 1904(...reconhecer horas negativas) o código não envia mais as linhas dos dias...tá enviando só o intervalo do título...

 

image.thumb.png.1827708770ecf3790ebf9baa09295405.png

Já voltei a data para o sistema antigo...mas não sei o que houve..o código não envia como estava programado;

 

 

Recebimento - Cópia.xls

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dos registros existentes na sua planilha quais você acha que o código deveria selecionar e enviar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
55 minutos atrás, osvaldomp disse:

Dos registros existentes na sua planilha quais você acha que o código deveria selecionar e enviar ?

O intervalo A5:P5 e as datas de dois dias para trás + o dia atual

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, Cleomirfl disse:

... e as datas de dois dias para trás ...

Esse critério é divergente do critério que você estabeleceu antes (leia as postagens acima), os registros não são enviados e o código está funcionando corretamente.

 

 ... + o dia atual

Na sua planilha não existe data do dia atual, então não há o que enviar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 25/08/2019 às 17:22, osvaldomp disse:

Com base nos seus comentários me parece que estamos tratando de arquivos diferentes. Assim, tomando como referência o arquivo e o código que você disponibilizou no post #1:

 

 

Experimente o código abaixo.

Para testar alterei as datas no intervalo A178:A187 para 24/8/19 e mantive os horários. Em seguida rodei o código abaixo enviando para o meu email. O resultado é mostrado na figura abaixo. Veja que foi enviado apenas o intervalo de interesse (A5:O5 & A178:O187), conforme o critério adotado.

image.png.8cf131a3d89dcbaf881092521ff6ad12.png

 


Sub EnviaIntervalo()
 Application.ScreenUpdating = False
 With Sheets("RECEBIMENTO DE CALES")
  .AutoFilterMode = False
  .Range("A5:O5").AutoFilter Field:=1, Criteria1:= _
      ">=" & CDbl(Date - 1), Operator:=xlAnd, Criteria2:="<" & CDbl(Date)
  Sheets.Add
  .Range("A5:O" & .Cells(Rows.Count, 1).End(3).Row).Copy [A1]
  .AutoFilterMode = False
 End With
 Columns("A:O").AutoFit
 Range("A1:O" & Cells(Rows.Count, 1).End(3).Row).Select
 ActiveWorkbook.EnvelopeVisible = True
 With ActiveSheet.MailEnvelope
  .Introduction = "Informações Apuradas as 06h"
  .Item.To = "destinatário@xxxx.com.br"   'coloque o destinatário da mensagem
  .Item.Subject = "Recebimento de Cales - 02/08/2019"
  .Item.Send
 End With
 Application.DisplayAlerts = False
 ActiveSheet.Delete
 Application.DisplayAlerts = True
 Application.ScreenUpdating = True
End Sub

 

Então se eu retornar com esse código e tiver a data do dia de ontem por exemplo ele vai funcionar de novo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, osvaldomp disse:

 

Coloquei o código de novo e inseri a data do dia de ontem(..dia 07/09)...continua puxando só o intervalo A5:P5 e não puxa o dia 07..o q será que houve? estava funcionando perfeitamente...

adicionado 14 minutos depois

@osvaldomp ...desculpa estar te incomodando em pleno domingo cara, mas é que preciso enviar esse relatório amanhã de manhã para a gerência...sou iniciante e VBA, ou seja...não domino o assunto...se puder me dar uma luz do que pode estar acontecendo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O primeiro código que antes você considerou como satisfatório envia os registros cujas datas na coluna A sejam iguais à data da véspera do dia do envio, ou seja, se você rodar o código hoje, 8/9/19, serão enviados os registros que contenham na coluna A a data 7/9/19.

Depois você pediu para incluir no critério acima os registros com data do dia do envio, ou seja, se rodar o código hoje, 8/9/19, serão enviados os registros com datas 7/9/19 e 8/9/19.

 

Então, se houver na coluna A datas que satisfaçam o critério os registros correspondentes serão enviados, se não, obviamente nada será enviado.

 

Na planilha que você postou no post #13 as datas que estão na coluna A são todas do ano 2015, óbvio que nenhuma delas se enquadra no critério e portanto óbvio que nada será enviado.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, osvaldomp disse:

 

O primeiro código que antes você considerou como satisfatório envia os registros cujas datas na coluna A sejam iguais à data da véspera do dia do envio, ou seja, se você rodar o código hoje, 8/9/19, serão enviados os registros que contenham na coluna A a data 7/9/19.

Depois você pediu para incluir no critério acima os registros com data do dia do envio, ou seja, se rodar o código hoje, 8/9/19, serão enviados os registros com datas 7/9/19 e 8/9/19.

 

Então, se houver na coluna A datas que satisfaçam o critério os registros correspondentes serão enviados, se não, obviamente nada será enviado.

 

Na planilha que você postou no post #13 as datas que estão na coluna A são todas do ano 2015, óbvio que nenhuma delas se enquadra no critério e portanto óbvio que nada será enviado.

 

Osvaldo...olhando aqui o erro estava justamente na troca da data para 1904(para reconhecer datas negativas) ...percebi quando você mencionou acima sobre a data de 2015...quando enviei a planilha tinha enviado como 2019(..mas como sistema de data modificado para 1904)..aí quando você recebeu ela automaticamente converteu para 2015...retornei aqui e deu certo...o código está funcionando normalmente...

 

Obrigado pelo apoio cara, desculpe a amolação...rsrs...acredito que agora não haverá mais problemas!!! Obrigado!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!