... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Como saber se o Outlook está instalado e aberto?

O Outlook pode ser manipulado programaticamente pelo Access, mas para isso é necessário que o Access passe a ter acesso aos métodos e propriedades do Outlook.  Esses métodos e propriedades ficam disponíveis ao selecionarmos o Outlook na lista de referências do VBA ou quando o referenciamos como um objeto, diretamente nas linhas de código.  Em ambas as formas referenciadas, ocorrerá erro no procedimento de envio de email se o Outlook não estiver instalado.  Então é preciso tratar esta questão na programação.

As técnicas de programação aqui apresentadas são para o caso do Outlook referenciado como um objeto.

Observe a função abaixo que verifica se o Outlook está instalado.  A palavra chave Nothing, que representa o estado NÃO inicializado de uma variável de objeto, é que nos permite identificar se o Outlook está ou não presente.  

Esta função deverá ser copiada para um módulo global.

Public Function fncOutlookInstalado() As Boolean
On Error Resume Next
fncOutlookInstalado = (Not CreateObject("Outlook.Application") Is Nothing)
End Function

Observe no código abaixo a chamada da função fncOutlookInstalado(), que informa se o Access está instalado antes de iniciar o processo de envio do email.

Private Sub btEnviar_Click()
Dim objOut As Object
Dim objmail As Object
Const olMailItem = 0

If fncOutlookInstalado = False Then
   MsgBox "O Outlook não está instalado...", vbInformation, "Aviso"
   Exit Sub 'Aborta o procedimento
End If
 

'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")

'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)
objmail.To = "fulano@xpto.com"
objmail.subject = "Apenas um teste"
objmail.Body = "Olá,Fulano!"
'--------------------------------------------------------
'envia o email
'--------------------------------------------------------
objmail.send

Set objmail = Nothing
Set objOut = Nothing
End Sub

A próxima questão a ser tratada, que também acarreta em erro, é a obrigatoriedade do Outlook estar aberto para o envio do email.

Veja abaixo a função que verifica se o Outlook se encontra aberto.  Observe que também é usada a palavra chave Nothing para analisar se o Outlook foi carregado na variável objeto. 

Esta função deverá ser copiada para um módulo global.

Function fncOutlookAberto() As Boolean
Dim objOutApp As Object
On Error Resume Next
Set objOutApp = GetObject(, "Outlook.Application")
If objOutApp Is Nothing Then
   fncOutlookAberto = False
Else
   fncOutlookAberto = True
End If
End Function

Veja o procedimento completo com os testes iniciais do Outlook.

Private Sub btEnviar_Click()
Dim objOut As Object
Dim objmail As Object
Const olMailItem = 0

If fncOutlookInstalado = False Then
   MsgBox "O Outlook não está instalado...", vbInformation, "Aviso"
   Exit Sub
Else
   If fncOutlookAberto = False Then
     'Ou se gera uma mensagem para o usuário, que o Outlook tem que ser aberto.
 
     'Msgbox "Mantenha o Outlook aberto para ser possível o envio do email..." 
     'Exit sub 
 
     'ou force a abertura do Outlook.
     'Call Shell("Outlook.exe", vbMinimizedNoFocus)
   End If
End If
 

'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")

'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)
objmail.To = "fulano@xpto.com"
objmail.subject = "Apenas um teste"
objmail.Body = "Olá, Fulano!"
'--------------------------------------------------------
'envia o email
'--------------------------------------------------------
objmail.send

Set objmail = Nothing
Set objOut = Nothing
End Sub
 

Segue um exemplo com o código apresentado.  Como teste, feche o Outlook e tente enviar um email por este arquivo exemplo.

Bom estudo!



 


11 comentário(s)

Paulo Ferreira Pantoja   13/06/2011 09:56:14

obrigado, mais eu to precisando de videos que se possivel me mostre os passos para montar um banco de dados para funcionarios no setor de cadastro, por farvor, obrigado.

Paulo Kazumiti Todoroki   13/06/2011 11:31:12

Muito útil esta dica e como utilizo constantemente a dupla Access X Outlook, certamente já ficará nos meus favoritos!

Marcio Melo - RJ   13/06/2011 15:20:36

Adorei... já utilizo o seu form de enviar e-mail que é nota 10, realmente todos na empresa perceberam na prática que os e-mail são enviados com o Outlook aberto ou quando é aberto, e outra se não instalado dava um erro, ai tive que depurar na época na rotina onde deu o erro, informando que era devido ao outlook não estar instalado, ou seja, feito essa informação na "marra", agora com essas novas dicas irei imprementar a correta depuração que é identificar tudo antes que aconteça, vi que agora posso até escolher em abrir ou não o outlook, ou apresentar uma mensagem sobre esse detalhe, muito show. Gostei muito e vou tentar fazer essas mesmas analogias para o PDF e Windows Media que também depurei de maneira errônea.

O conhecimento aberto a todos...

Dica para o Sr. Paulo Ferreira Pantoja, estude todas as vídeo aulas aqui disponibilizadas, utilize o Maestro + Monta Ribbons como seu inicial. O controle de pessoal que você deseja, verás que é um mínino em relação ao vasto conhecimento que esta disponibilizado aqui... procure entender Tabelas/campos x Relacionamentos.

Sou mais Brasil!


Avelino Sampaio   14/06/2011 10:14:53

Paulo Ferreira,

Alem da dica do meu amigo Marcio Melo, sugiro você baixar os modelos do próprio Access, que vem com diversos tipos de cadastros.

EDUARDO ROCHA   13/07/2012 12:17:45

Professor, uma curiosidade:
não consigo exectar o OSK.EXE com a funçao SHELL.
e preciso muito disso pois sou deficiente fisico e me ajudaria muito se eu pudesse acionar o Teclado Virtual atraves de um botão.

Avelino Sampaio   16/07/2012 08:06:51

Eduardo,

Copie a o procedimento abaixo para um módulo global:

Public Sub fncCarregaTeclado()
Dim objws As Object
Set objws = CreateObject("wscript.shell")
objws.Run "c:\windows\system32\osk.exe", 5, "false"
End Sub

Basta executar o procedimento em qualquer local do seu código:

call fncCarregaTeclado

Sucesso!

Julia   14/04/2014 12:42:37

Avelino,

Por alguns problemas, passei a usar esse código em uma Ribbon, só que quando cancelo o envio do envio aparece a seguinte mensagem:

A acão SendObject foi cancelada.

Código ao clicar em um botão de uma Ribbon:

Case "btOutlook"
On Error Resume Next
Dim objOut As Object
Const olMailItem = 0

'--------------------------------------------------------------
'Esta é a parte que testa se o Outlook está instalado e aberto
'--------------------------------------------------------------
If fncOutlookInstalado = False Then
MsgBox "O Outlook não está instalado...", vbInformation, "Aviso"
Exit Sub
Else
If fncOutlookAberto = False Then
MsgBox "Mantenha o Outlook aberto para ser possível o envio do email...", vbInformation, "Aviso"
Exit Sub
End If
End If

'--------------------------------------------------------
'Abrir o email - "Escrever a mensagem":
'--------------------------------------------------------
DoCmd.SendObject

Set objOut = Nothing

Julia   14/04/2014 12:44:42

** Quando aparece a mensagem: "A acão SendObject foi cancelada."

Simplesmente trava o access, a ponto de eu ter que fechá-lo no gerenciador de tarefas d Windows.

Obrigado.

Julia

Diego   04/03/2015 22:41:41

Quando inseri o cod abaixo apareceu "erro de copilação, variável não definida" e 'fncOutlookInstalado' selecionado


If fncOutlookInstalado = False Then
MsgBox "O Outlook não está instalado...", vbInformation, "Aviso"
Exit Sub
Else
If fncOutlookAberto = False Then
'Ou se gera uma mensagem para o usuário, que o Outlook tem que ser aberto.

'Msgbox "Mantenha o Outlook aberto para ser possível o envio do email..."
'Exit sub

'ou force a abertura do Outlook.
'Call Shell("Outlook.exe", vbMinimizedNoFocus)
End If
End If

Diego   04/03/2015 22:57:25

Baixei o teu banco de dados demonstração e a mensagem é que outlook não está instalado, uso outlook 2013 e access 2013

Desde já obrigado pela atenção

Diego   04/03/2015 22:59:33

Ops, esqueci de comentar, só acontece isso se meu outlook estiver aberto, caso esteja fechado abre no momento e show, mas dai envia e fecha a janela, tenho que abri lo pelo executável oulook pra completar o envio do email, pq não sai da caixa de saída se não estiver aberto.


Envie seu comentário: