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
| « 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 tarefasO 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:
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:
O agendamento ocorrerá a partir de um clique em um botão no formulário:
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 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 OutlookO 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:
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:
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 pedidoNo 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 |
||
|
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 |
||
|
|
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
|
Para Todos os Detalhes, Acesse:
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-2026 ®
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