MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Erro de sintaxe (operador faltando) vba outlook

    Compartilhe

    Vitoriaterra
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 1
    Registrado : 17/08/2016

    Erro de sintaxe (operador faltando) vba outlook

    Mensagem  Vitoriaterra em Qua 17 Ago 2016, 14:06

    Pessoal, bom dia.

    Tenho um código (abaixo) que está apresentando o seguinte erro:

    "Erro de sintaxe (operador faltando) na expressão de consulta "Mc Donald's"

    Já é a segunda vez que dá esse mesmo erro e eu acredito que seja em razão do apóstrofe...porém não sei como corrigir..

    Alguém consegue me ajudar, por favo?

    O erro sempre da na linha :  objConnection.Execute strSQL

    Segue o código:

    Option Explicit

    Sub CustomMailMessageRule_GeraP(Item As Outlook.MailItem)  'CustomMailMessageRule
    '****************************************************************************
    'Gera protocolo para as mensagens recebidas
    '****************************************************************************
       Dim strConnectString        As String
       Dim objConnection           As ADODB.Connection
       Dim strDbPath               As String
       Dim strSQL                  As String
       Dim rs                      As New ADODB.Recordset
       Dim mProtocolo              As String
       Dim mEnvio                  As Long
       Dim nP                      As Long
       Dim mProcesso As String
       Dim mPasta                  As Outlook.Folder

       If (Left(Item.Subject, 5) = "Lida: " And Left(Item.Body, 25) = "Sua mensagem foi lida em ") Or _
          (Left(Item.Subject, 10) = "Entregue: " And Left(Item.Body, 54) = "Sua mensagem foi entregue aos seguintes destinatários:") Or _
          (Left(Item.Subject, 21) = "Ausência Temporária: ") Or _
          (Left(Item.Subject, 25) = "Não foi possível enviar: " And InStr(1, Item.Sender, "MicrosoftExchange") > 0) _
          Then
    '        Item.Subject = Item.Subject & " - sem protocolo"
    '        Item.Save
           Exit Sub
       End If
       
       strDbPath = "\\fswcorp\ceic\SNL\COMUM\Atendimento\Controle_Suporte_v1.accdb"
       strConnectString = "Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDbPath & ";"

       Set objConnection = New ADODB.Connection
       objConnection.Open strConnectString
       
    '**Define o número do protocolo (Ano, Mês, Número crescente de 4 dígitos) e o número do envio**
       'Verifica se já tem numero de protocolo no assunto e guarda sua posição, se houver
       nP = InStr(1, Item.Subject, "Protocolo: ")
       If nP = 0 Then 'Primeiro envio da mensagem (não tem protocolo)
           rs.Open "Select TOP 1 Protocolo, Envio FROM tbLogSuporte ORDER BY Protocolo DESC, Envio DESC;", objConnection, adOpenForwardOnly, adLockReadOnly
           If Not rs.EOF Then
               If Left(rs!Protocolo, 6) = Year(Now()) & Format(Month(Now()), "00") Then 'Testa se mudou o mês
                   mProtocolo = Year(Now()) & Format(Month(Now()), "00") & Format(Right(rs!Protocolo, 4) + 1, "0000")
               Else
                   mProtocolo = Year(Now()) & Format(Month(Now()), "00") & "0001"
               End If
           Else
               mProtocolo = Year(Now()) & Format(Month(Now()), "00") & "0001"
           End If
           rs.Close
           mEnvio = 1
           
           'Insere o número de protocolo no assunto do email
           Item.Subject = Item.Subject & " - Protocolo: " & mProtocolo
           Item.Save
           
       Else 'Mensagem está sendo reenviada (já tem protocolo)
           mProtocolo = Mid(Item.Subject, nP + 11, 10)
           
           strSQL = "Select TOP 1 Protocolo, Envio FROM tbLogSuporte WHERE Protocolo = '" & mProtocolo & "' "
           strSQL = strSQL & "ORDER BY Envio DESC;"
           rs.Open strSQL, objConnection, adOpenForwardOnly, adLockReadOnly
           mEnvio = rs!Envio + 1
           rs.Close
       End If
       
       'Consulta relação de palavras chaves e pastas
       strSQL = "Select Palavra_Chave, Pasta FROM tbClassificacao ORDER BY Ordem;"
       rs.Open strSQL, objConnection, adOpenForwardOnly, adLockReadOnly
       'Busca palavras chaves no assunto e no corpo do email e determina a pasta destino
       mProcesso = ""
       Do Until rs.EOF
           If InStr(1, Item.Subject, rs!Palavra_Chave, vbTextCompare) Then
              ' InStr(1, Item.Body, rs!Palavra_Chave, vbTextCompare) Then
               mProcesso = rs!Pasta
               Exit Do
           End If
           rs.MoveNext
       Loop
       rs.Close
       
       'Grava Log de recepção da mensagem
       strSQL = "INSERT INTO tbLogSuporte (Protocolo, Envio, DataHora_Rec, Demandante, Processo, Assunto) VALUES ('" & _
       mProtocolo & "','" & _
       mEnvio & "', #" & _
       Now() & "#, '" & _
       Item.Sender & "', '" & _
       mProcesso & "', '" & _
       Left(Item.Subject, 255) & "');"
       objConnection.Execute strSQL
       
       'Move mensagem para pasta especificada. Caso não tenha encontrado palavra chave, deixa na caixa de entrada
       If mProcesso <> "" Then
           Set mPasta = Application.GetNamespace("MAPI").Folders("Numerario@correio.itau.com.br"). _
                       Folders("Demandas Numerario").Folders(mProcesso)
           Item.Move mPasta
       End If
       
       Set objConnection = Nothing
     
    End Sub

    Convidado
    Convidado

    Re: Erro de sintaxe (operador faltando) vba outlook

    Mensagem  Convidado em Sex 19 Ago 2016, 09:35

    Olá!

    Qual dos campos leva o nome Mc Donald's ?  Supondo que seja no campo Demandante; troque o apóstrofe por aspas duplas(em vermelho).

    strSQL = "INSERT INTO tbLogSuporte (Protocolo, Envio, DataHora_Rec, Demandante, Processo, Assunto) VALUES ('" & _
    mProtocolo & "','" & _
    mEnvio & "', #" & _
    Now() & "#, """ & _
    Item.Sender & """, '" & _
    mProcesso & "', '" & _
    Left(Item.Subject, 255) & "');"
    objConnection.Execute strSQL


    Aguardamos

      Data/hora atual: Sex 09 Dez 2016, 13:30