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-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