AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI

Você está em: PrincipalArtigosLivroexc03office › Capítulo 1 : 02
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Integrando o Office ao Excel 2003 Utilizando VBA
Autor: Robert Friedrick Martim
Lição 02 de 05 - Integrando o Access ao Outlook

Nossa primeira parada é a integração do Access ao Outlook. A cada nova versão do Office a integração dos aplicativos fica cada vez mais robusta e interessante.

Hoje, se o usuário precisa agendar tarefas a melhor coisa que ele pode fazer é distribuir tal agendamento para o Outlook e deixá-lo lá. O motivo para isso é bem simples: você poderá facilmente delegar a tarefa para outra pessoa e poderá controlá-la mais facilmente sem ter que reinventar a roda no Access.

Uma integração óbvia diz respeito ao envio de e-mail. Também irei cobrir esta parte neste módulo.

Agendamento e atribuição de tarefas

O primeiro exemplo é de agendamento e e atribuição de tarefa a partir do Access. Para este exemplo, utilizo um pequeno banco de dados criado somente para este tópico. O BD não possui qualquer outra utilidade a não a de exemplo para o código que mostrarei.

O objetivo deste código é agendar e atribuir uma tarefa. A tarefa é aberta para edição antes de ser enviada.

Antes de continuar, o leitor precisa instalar as referências aos objetos do Microsoft Outlook. Para isso, abra o VBE é vá até Ferramentas à Referências à Microsoft Outlook Object Library (a versão dependerá da versão do seu Office).

Devido ao sistema de segurança do Outlook a seguinte mensagem será mostrada quando executarmos o código:


Figura 2‑1 Mensagem de segurança do Outlook

Permita o acesso para a quantidade de minutos que desejar para que possa fazer os testes sem ter a mensagem aparecendo a todo instante.

Mais adiante, mostrarei como utilizar o Redemption de modo que a mensagem acima não seja mostrada durante a execução.

Uma vez que nosso código esteja pronto e rodando, a tarefa agendada é mostrada na figura abaixo:


Figura 2‑2

O agendamento ocorrerá a partir de um clique em um botão no formulário:


Figura 2‑3

A primeira tarefa que precisamos executar é criar o código para o botão. O código que criará a tarefa no Outlook será colocado em um módulo. As explicações são adicionadas ao código.

O código para o botão ficará, portanto, da seguinte forma:

Private Sub cmdAgendar_Click()
     On Error GoTo Error_Handler
     With Me
 '       Checa para saber se existe um contato ou  o campo é nulo.
         If  IsNull(.Contato) Then
             MsgBox "Favor adicionar um  contato antes de continuar!", _
                 vbCritical
             Exit  Sub
         End If
'       Checa para saber se existe um email ou o  campo é nulo.
           If  IsNull(.Email) Then
               MsgBox "Favor adicionar um  email válido antes de continuar!", _
                   vbCritical
               Exit  Sub
           End If
           
                   '       Chama a rotina para agendamento da  tarefa
           Call  agendamento(.IDPedido, .Produto.Value, _
               .Contato, .Email,  .ClienteRef)
       End With
       Exit Sub
       
                   '  Tratamento de erro caso um ocorra
                   Error_Handler:
       MsgBox "Um erro  ocorreu. Comunique o administrador imediatamente " _
            & "as informações a  seguir:" & vbCr & vbCr _
            & "Erro número: " &  Err.Number & vbCr _
            & "Descrição: " &  Err.Description, vbCritical
End Sub

Para o código do módulo faremos:

'Recebe os  argumentos passados pelo formulário
Sub agendamento(IDPedido As Long, Produto As String, _
     Contato As  String, Email As  String, ClienteRef As  Variant)
      '   Em caso de erro passar mensagem para o  usuário comunicar o
                   '   administrador do banco de dados
       On Error GoTo Error_Handler
       
                   '   Declara os objetos e variáveis
       Dim appOl       As  Outlook.Application
       Dim OlTarefa     As Outlook.TaskItem
       Dim Para        As Object
       Dim  msg         As  String
       
                   '   Cria os objetos appOl e OlTarefa
       Set appOl = New Outlook.Application
       Set OlTarefa = appOl.CreateItem(olTaskItem)
       
                   '   Mensagem para aparecer no corpo da tarefa  sendo enviada
       msg = "Ref: " & vbTab  & vbTab & ClienteRef & vbCr
       msg = msg & "IDPedido: " &  vbTab & vbTab & IDPedido & vbCr
       msg = msg & "Produto: " &  vbTab & vbTab & Produto
       msg = msg & vbCr & vbCr & vbCr
       msg = msg & "Prezado/a "  & Contato & "," & vbCr & vbCr
       msg = msg & "Por favor, tome nota  deste agendamento e mantenha-me "
       msg = msg & "informado do  andamento deste pedido." & vbCr & vbCr
       msg = msg & "Vencimento desta  tarefa é em "
       msg = msg & Format(CDate(Date + 7),  "dd mmmm yyyy")
       msg = msg & vbCr & vbCr
       msg = msg & "Atenciosamente,"  & vbCr & "Robert Martim"
       msg = msg & vbCr & "Diretor de  Novos Produtos"
           
                   '   Define os parâmetros da tarefa sendo criada
       With  OlTarefa
           .Assign
                   '       Define o dono da tarefa (quem deve  executá-la)
           Set Para = .Recipients.Add(Email)
                   '       Assunto da tarefa
           .Subject = "Acompanhar o pedido  #" & IDPedido
                   '       Data de início da tarefa
           .StartDate = Date
                   '       Data para término da tarefa
           .DueDate = Date  + 7
                   '       Data e hora do Lembrete
           .ReminderTime = Round(Now + 5, 1)
                   '       "Seta" lembrete como sendo  verdadeiro
           .ReminderSet = True
                   '       Corpo da tarefa
           .Body = msg
                   '       Aviso que o processo foi concluído
           MsgBox "Tarefa foi criada com  sucesso. Ela será mostrada " & _
               " na janela de edição do  Outlook caso queira corrigir algo " & _
               "antes de enviá-la.",  vbInformation
                   '       Mostra a tarefa para ediçào se necessário  for.
                   '       A janela do Outlook aparece em VB  Modeless
           .Display 0
       End With
       Limpar:
                   '   Limpa a memória dos objetos criados.
       Set appOl = Nothing
       Set OlTarefa = Nothing
       Set Para = Nothing
       Exit Sub
'  Tratamento de erro caso um ocorra
                   Error_Handler:
       MsgBox "Um erro  ocorreu. Comunique o administrador imediatamente " _
            & "as informações a  seguir:" & vbCr & vbCr _
            & "Erro número: " &  Err.Number & vbCr _
            & "Descrição: " &  Err.Description, vbCritical
           
'Remete o  código ao rótulo "Limpar" para remover os objetos da memória
GoTo Limpar
End Sub

Você pode, agora, rodar o código para gerar o seu agendamento.

Agendamento e atribuição de tarefas: removendo avisos de segurança do Outlook

O exemplo funciona bem, mas possui o agravante da mensagem de segurança. Como é improvável que todos os agendamento sejam feitos nos dez minutos alocados o mais provável é o usuário ter que autorizar acesso ao Outlook sempre que clicar no botão de agendamento.

Neste tópico mostrarei como utilizar o Redemption (http://www.dimastr.com/redemption/redemption.zip) para resolver o problema. Contudo o leitor deve ter em mente o seguinte:

  • O Redemption gratuito não possui licença para distribuição e não vai com os modelos para redistribuição. Isto quer dizer que se o projeto precisa ser rodado em 10 máquinas, então, o redemption precisa estar presente em todas elas.
  • Existe a versão do Redemption para distribuição no próprio site acima para aqueles que precisam distruibuir o trabalho. Esta versão é paga, mas pode valer a pena para desenvolvedores.

Baixe o arquivo do site indicado (caso o link tenha mudado, procure no site) e instale-o no seu computador. Com ele instalado, abra o VBE e instale as referências aos objetos do Outlook e do Redemption.

A figura a seguir mostra a biblioteca do Outlook e do Redemption (SafeOutlook Library) instaladas no projeto:


Figura 2‑4 Referências às bibliotecas do Outlook e Redemption

Estamos agora prontos para escrever o código seguro o qual evitará a mensagem do Outlook. Mais uma vez as explicações são contidas no código. Iniciamos pelo código do botão:

Private Sub cmdAgendar_Click()
     On Error GoTo Error_Handler
     With Me
 '       Checa para saber se existe um contato ou  o campo é nulo.
         If  IsNull(.Contato) Then
             MsgBox "Favor adicionar um  contato antes de continuar!", _
                 vbCritical
             Exit  Sub
         End If
'       Checa para saber se existe um email ou o  campo é nulo.
           If  IsNull(.Email) Then
               MsgBox "Favor adicionar um  email válido antes de continuar!", _
                   vbCritical
               Exit  Sub
           End If
           
                   '       Chama a rotina para agendamento da  tarefa
           Call  agendamento(.IDPedido, .Produto.Value, _
               .Contato, .Email,  .ClienteRef)
       End With
       Exit Sub
       
                   '  Tratamento de erro caso um ocorra
                   Error_Handler:
MsgBox "Um erro  ocorreu. Comunique o administrador imediatamente " _
           & "as informações a  seguir:" & vbCr & vbCr _
           & "Erro número: " &  Err.Number & vbCr _
           & "Descrição: " &  Err.Description, vbCritical
End Sub
                   O próximo passo é criar o código  para o módulo:
                   'Recebe os  argumentos passados pelo formulário
                   Sub agendamento(IDPedido As Long, Produto As String, _
       Contato As  String, Email As  String, ClienteRef As  Variant)
'   Em caso de erro passar mensagem para o  usuário comunicar o
                   '   administrador do banco de dados
       On Error GoTo Error_Handler
       
                   '   Declara os objetos e variáveis
       Dim appOl       As  Outlook.Application
       Dim OlTarefa     As Outlook.TaskItem
                   '   Declara o SafeTaskItem e o Objeto  "Para"
                   '   o qual é usado para atribuir a tarefa
       Dim  SafeTarefa  As  Redemption.SafeTaskItem
       Dim  Para        As  Object
                   '   Declara a mensagem
       Dim  msg         As  String
       
                   '   Cria os objetos appOl e OlTarefa
       Set appOl = New Outlook.Application
       Set OlTarefa = appOl.CreateItem(olTaskItem)
       Set SafeTarefa = New  Redemption.SafeTaskItem
       
                   '   Mensagem para aparecer no corpo da tarefa  sendo enviada
       msg = "Ref: " & vbTab  & vbTab & ClienteRef & vbCr
       msg = msg & "IDPedido: " &  vbTab & vbTab & IDPedido & vbCr
       msg = msg & "Produto: " &  vbTab & vbTab & Produto
       msg = msg & vbCr & vbCr & vbCr
       msg = msg & "Prezado/a "  & Contato & "," & vbCr & vbCr
       msg = msg & "Por favor, tome nota  deste agendamento e mantenha-me "
       msg = msg & "informado do  andamento deste pedido." & vbCr & vbCr
       msg = msg & "Vencimento desta  tarefa é em "
       msg = msg & Format(CDate(Date + 7),  "dd mmmm yyyy")
       msg = msg & vbCr & vbCr
       msg = msg & "Atenciosamente,"  & vbCr & "Robert Martim"
       msg = msg & vbCr & "Diretor de  Novos Produtos"
           
       SafeTarefa.Item = OlTarefa
           
                   '   Define os parâmetros da tarefa sendo criada
       With  SafeTarefa
           .Assign
                   '       Define o dono da tarefa (quem deve  executá-la)
           Set Para = .Recipients.Add(Email)
                   '       Resolve os endereços de e-mail. Os  mesmos não são
                   '       colocados na caixa de endereço, mas  resolvidos e
                   '       enviados diretamento para o dono  (executor) da tarefa
           Para.Resolve
                   '       Assunto da tarefa
           .Subject = "Acompanhar o pedido  #" & IDPedido
                   '       Data de início da tarefa
           .StartDate = Date
                   '       Data para término da tarefa
           .DueDate = Date  + 7
                   '       Data e hora do Lembrete
           .ReminderTime = Round(Now + 5, 1)
                   '       "Seta" lembrete como sendo  verdadeiro
           .ReminderSet = True
                   '       Corpo da tarefa
           .Body = msg
                   '       Aviso que o processo foi concluído
           MsgBox "Tarefa foi criada com  sucesso. Ela será enviada " & _
               " para o destinatário  determinado na tabela de clientes " & _
               vbInformation
                   '       Envia a tarefa sem mostrar a janela para  edição
           .Send
       End With
       
                   Limpar:
                   '   Limpa a memória dos objetos criados.
       Set appOl = Nothing
       Set OlTarefa = Nothing
       Set SafeTarefa = Nothing
       Set Para = Nothing
       Exit Sub
'  Tratamento de erro caso um ocorra
                   Error_Handler:
      MsgBox "Um erro  ocorreu. Comunique o administrador imediatamente " _
           & "as informações a  seguir:" & vbCr & vbCr _
           & "Erro número: " &  Err.Number & vbCr _
           & "Descrição: " &  Err.Description, vbCritical
         ' Remete  ao rótulo Limpar para remover os objetos da memória
GoTo Limpar
End Sub

Enviando e-mail de confirmação de despacho de pedido

No próximo exemplo mostrarei como criar uma rotina para envio de e-mail confirmando que um determinado pedido foi despachado. Aqui, utilizo o banco de dados Northwind. Algumas modificações são necessárias na estrutura da tabela assim como no formulário de pedidos.

Não entrarei em detalhes sobre as modificações feitas, pois este não é o objetivo deste curso. Aqui, assumo que o leitor saiba como isso é feito e que poderá descobrir sozinho observando o exemplo que acompanha este módulo.

O banco de dados Northwin que utilizo está em inglês, pois está é a versão que tenho disponível eu meu PC. Entretanto, isso não deve ser nenhuma barreira para acompanhar os exemplos que darei aqui.

A figura abaixo mostra as modificações efetuadas no formulário de pedido:

Ao clicarmos na caixa de seleção a seguinte mensagem será passada para o usuário:

Se o usuário deseja continuar, então, o e-mail é enviado e a caixa de combinação é marcada. Caso contrário, o evento é cancelado e a caixa não é marcada.

Com a caixa inserida em nosso formulário, abra o modo de design (ou a janela de código diretamente) e acesse o VBE onde iremos colocar o código do clique na caixa de seleção.

Lembre-se que os exemplos assumem que as bibliotecas do Outlook e Redemption estão instaladas corretamente.

Como isso em mente podemos iniciar o nosso código:

Private Sub Shipped_Click()
     'Em caso de erro ir para o tratamento de erro
     On Error GoTo Error_Handler
'   Dimensiona os objetos e variáveis que  utilizaremos
       Dim appOl       As Outlook.Application
       Dim olEmail     As Outlook.MailItem
       Dim safeMail    As Redemption.SafeMailItem
       Dim msg         As String
       Dim resp        As Integer
       
                   '   Se o valor da caixa de seleção já estiver  selecionado
                   '   haverá um "toggle" (alternará) e o  e-mail já foi enviado
       If Me.Shipped.Value = False Then
                   '       Mostrar mensagem que o item já foi  enviado
           MsgBox "Desculpe, mas você já  enviou este e-mail. " _
               & "Não é possível enviar o  mesmo e-mail mais " _
               & "de uma vez",  vbCritical
                   '       Retorna o valor para verdadeiro
           Me.Shipped.Value = True
           Exit Sub
       End If
       
                   '   Confirmar antes de enviar o e-mail.
       resp = MsgBox("Você está prestes a  enviar um e-mail de" _
           & " confirmação de despacho.  Deseja realmente continuar?", _
           vbQuestion + vbYesNo)
'   Se não for confirmado o envio, então,  desmarcar caixa de
                   '   seleção e continuar trabalhando normalmente.
       If Not resp = vbYes Then
            Shipped.Value = False
           Exit Sub
       End If
       
                   '   Se não existir um valor para o e-mail,  avisar, desmarcar
                   '   envio e sair da rotina
       If  IsNull(Me.Email) Then
           MsgBox "Não há um email válido  para este cliente. " _
               & "digite um e-mail válido  antes de continuar.", _
               vbInformation
                Shipped.Value = False
           Exit Sub
       End If
'   Cria os objetos
       Set appOl = New Outlook.Application
       Set olEmail = appOl.CreateItem(olMailItem)
       Set safeMail = New  Redemption.SafeMailItem
       
                   '   Mensagem para envio
       msg = msg & "Este e-mail é uma  confirmação que o seu pedido"
       msg = msg & " número " &  Me.OrderID
       msg = msg & " foi despachado em  (" & Format(Date, "dd mmmm  yyyy")
       msg = msg & ")" & vbCr  & vbCr & "Agradecemos a sua preferência e "
       msg = msg & "esperamos por um novo  pedido em breve." & vbCr & vbCr
       msg = msg & "Atencionsamente,"  & vbCr & "Robert Martim" & vbCr
       msg = msg & "Serviço de  Atendimento ao Cliente"
       
                   '   Define as propriedades do email
       With  olEmail
           .Subject = "Despacho do pedido  número " & Me.OrderID
           .Body = msg
           .To = Me.Email
       End With
           
                   '   Pergunta se o usuário deseja editar ou não o  e-mail
       resp = MsgBox("Este e-mail será  enviado automaticamente" _
           & " ao clicar no botão 'Sim'.  Caso queira editar a mensagem" _
           & " clique no botão  'Não'." & vbCr & vbCr & "Deseja enviar " _
           & "automaticamente?",  vbQuestion + vbYesNo)
       
                   '   Define o email como sendo seguro (utilizando  Redemption)
       safeMail.Item = olEmail
       
                   '   Abra para edição ou envia o e-mail
       Select Case resp
           Case vbYes
                    safeMail.Send
           Case vbNo
                safeMail.Display 0
       End Select
'   Remove os objetos da memória
                   Limpar:
       Set appOl = Nothing
       Set olEmail = Nothing
       Set safeMail = Nothing
       Exit Sub
' Em caso  de erro mostrar esta mensagem personalizada.
                   Error_Handler:
      MsgBox "Um erro ocorreu. Favor  reportar erro para o administrador" _
           & " passando a seguinte  informação:" & vbCr & vbCr _
           & "Número do erro: "  & Err.Number & vbCr _
           & "Descrição do erro: "  & Err.Description, vbCritical
GoTo Limpar
End Sub
« Anterior Δ Página principal ¤ Índice Próxima »

Quer Aprender VBA no Excel, Sem Dificuldades, com Exemplos
Práticos Passo a Passo e com Explicações Detalhadas?

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passos

Junto com o livro você Recebe 11 Bônus Incluindo 50 horas de Vídeo Aulas.

Mesmo que Você não Saiba Nada de Programação VBA ou já Tenha Tentado
Aprender VBA e Desistiu ou Achou Difícil, com Este Livro EU GARANTO que Você Aprenderá, SEM DIFICULDADES. APRENDIZADO GARANTIDO.

Clique Aqui Para Todos os Detalhes sobre Esta Oferta

- É com alegria que Comunico o lançamento do meu 42º Livro.

 

- Perfeito para Iniciantes em Programação VBA.

 

- Abordo desde o Básico até Comandos Avançados.

 

- Códigos detalhadamente explicados, linha por linha.

 

- Criação de Funções e Procedimentos com VBA.

 

- O Modelo de Objetos do Excel - Exemplos Práticos.

 

- Criação de Formulários - UseForms.

 

- Criação de um Sistema de Cadastro Completo, com Foto.

 

- Como trabalhar com Tabelas Dinâmicas na Programação VBA.

 

- Como trabalhar com Gráficos na Programação VBA.

 

- Rotina que Escreve um número por Extenso usando VBA.

 

- E muito, muito mais mesmo...

 

- Junto com o livro você recebe 50 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas, Dashboards e Muito mais.

 

[Bônus]: 60 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas no Excel, Recursos Avançados, Dashboards e Muito mais.

 

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

A BÍBLIA DA
PROGRAMAÇÃO
VBA NO EXCEL

 

Quer receber novidades e e-books gratuitos?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI

(Online, Vitalício, Prático e Atualizado)!

  • Chega de ser Ignorado pelo Mercado!

  • A vida não vai Melhorar Sozinha!

  • Quem domina infraestrutura, domina o Mercado.

  • Com esta Formação você vai Dominar o Conhecimento e torne-se o Profissional que as Empresas estão Buscando, "desesperadamente", mas não estão encontrando.

NÃO PROCURE VAGAS, SEJA PROCURADO!

 

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

Para Todos os Detalhes, Acesse:

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

https://juliobattisti.com.br/curso-infra-ti.asp

 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2025 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI