Jump to content

Ganhe $$$ escrevendo tutoriais para nós!


Foto

Envio de conteúdo de células de diferentes colunas por e-mail

EXCEL;VBA;E-MAIL;OUTLOOK.




  • Faça login para responder
2 respostas neste tópico

#1 Maninho2010

Maninho2010
  • Participante
  • 7 mensagens

Publicado 13 July 2012 - 12:34 PM

Prezados amigos, Bom dia!
Preciso de uma ajuda para formatar uma função em uma planilha de prazos de manutenção. Nesta planilha terei uma coluna de identificação de determinado produto (Coluna "B"), uma coluna para inserção da data em que iniciei a manutenção deste produto (Coluna "C"); uma coluna informando se a manutenção do produto já foi finalizada (Coluna "D"), e em caso de ter sido finalizada, na coluna "E" é inserido a data de finalização. Na coluna "F" estará o contador de dias em que o produto permaneceu em manutenção, ou nos casos em que a manutenção ainda não tiver sido finalizada, o tempo em que o produto esta em reparo (Manutenção). Para o cálculo deste período, utilizei a fórmula "=SE(D2="Sim"|E2-C2|(HOJE())-(C2))". Pois bem, vamos ao problema: Toda vez que acionado um botão (Na planilha denominei-o "Atualizar") é rodado uma macro que deverá verificar todos os produtos que permanecem em manutenção (Texto "Não" na coluna "D"), feito isto, deverá identificar dentre estes ainda em manutenção, quais os que estão a 25 dias ou mais em manutenção (Através da coluna "F"). Identificados os produtos nestas condições (em manutenção e a 25 dias ou mais), deverá disparar um e-mail contendo no texto a identificação deste(s) produto(s) - coluna "B"-, a(s) respectiva(s) data(s) de início da(s) manutenção - coluna "C" -, e o(s) respectivo(s) tempo(s) em que o(s) produto(s) permanece(m) em manutenção - Coluna "F".

Planilha exemplo (Figura em anexo)


Resultado por e-mail:

110001 25/3/2012 110
110002 26/3/2012 109
110004 28/3/2012 107


Tal e-mail deverá ser disparado para 3 destinatários fixos, por isso, podem estar inseridos na raiz da função da macro.


Espero a ajuda dos senhores, já fiz muitas pesquisas, mas não encontrei nenhuma que atendesse 100% a este humilde pedido. Se alguém puder ajudar e que precise de mais informações é só solicitar (Não anexei a planilha por que aqui na empresa o sistema bloqueia o upload deste tipo de arquivo, mas se for o caso posso mandar por e-mail. Deixei em anexo a imagem do modelo simples elaborado).
Mais uma vez agradeço a compreensão e auxílio de todos. Este fórum sempre traz as melhores soluções, mesmo para pessoas leigas e iniciantes em VBA, como eu.
Abraço a todos!

Attached Thumbnails

  • Imagem_Plan.jpg

Editado por Maninho2010, 13 July 2012 - 12:42 PM.
''





#2 Maninho2010

Maninho2010
  • Participante
  • 7 mensagens

Publicado 19 July 2012 - 07:18 PM

Caros,
novamente aqui para tentar um ajuda. Para solução do problema anterior, testei o código abaixo:


Sub TesteMacroFiltro()
'
' TesteMacroFiltro Macro
'

'
ActiveSheet.Range("$A$1:$G$23").AutoFilter Field:=4, Criteria1:="Não"
ActiveSheet.Range("$A$1:$G$23").AutoFilter Field:=6, Criteria1:=">=25", _
Operator:=xlAnd
Range("B:C,F:F").Select
Selection.Copy
ActiveSheet.Range("B:C,F:F").Select

Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim decisao As VbMsgBoxResult


decisao = MsgBox("Deseja enviar o email ? ", vbYesNo, "Controle de Liberações")

If decisao = vbYes Then

With Application
.EnableEvents = False
.ScreenUpdating = False
End With

Set rng = Nothing
Set rng = ActiveSheet.UsedRange


Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
.To = "teste.teste@hotmail.com"
.CC = ""
.BCC = ""
.Subject = "Manutenção de equipamentos - Calculo diario de manutenção " & DateTime.Date
.HTMLBody = RangetoHTML(rng)
.Body = "Os equipamentos listados abaixo estão com respectiva manutenção acima do prazo definido em contrato:"

.Save
.send
End With
On Error GoTo 0

With Application
.EnableEvents = True
.ScreenUpdating = True
End With

Set OutMail = Nothing
Set OutApp = Nothing
Else
End If



End Sub

Function RangetoHTML(rng As Range)

Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook

TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

'Copy the range and create a new workbook to past the data in


End Function

Infelizmente, o código faz uma série de etapas do que preciso, porém, não consegui colar os dados das colunas selecionadas para dentro do corpo do e-mail. Tentei outros códigos que colavam todas as colunas da planilha no e-mail, entretanto, como a planilha em que vou utilizar a macro tem várias colunas, preciso que seja enviado somente as 03 colunas descritas no texto anterior (B, C e F). Em anexo segue a planilha modelo.
Desde já agradeço o auxílio, como sou leigo no assunto VBA, estou levando um laço.

Arquivos Anexados


#3 Maninho2010

Maninho2010
  • Participante
  • 7 mensagens

Publicado 27 July 2012 - 02:57 PM

Caros,

Estou quase conseguindo. Quero ser bem claro que o meu conhecimento em VBA é o basico, e por este motivo conto com ajuda de todos.

Preciso de uma lógica para COLAR no corpo do e-mail o conteúdo de colunas copiadas do excel. Mais especificamente, preciso que cole no corpo do e-mail todo o conteúdo copiado das colunas "B", "C" e "F"..

Na lógica já existente, o conteúdo já foi selecionado e a ordem de copiar também esta sendo executada, mas estou com dificuldades em encontrar o comando de colar no corpo do e-mail. Alguém poderia ajudar?

Mais uma vez agradeço!






Tópicos Relacionados Collapse

  Tópico Fórum Criado por Estatísticas Última atualização




Ganhe $$$ escrevendo tutoriais para nós!