2017-09-28 1 views
0

Ich bin ein Anfänger, wenn es um VBA-Code geht. Die Idee besteht darin, eingehende E-Mails nach einer bestimmten Betreffzeile zu durchsuchen, die E-Mail-Adresse aus der ersten Zeile der E-Mail zu extrahieren und auf die aus der ersten Zeile extrahierte E-Mail-Adresse zu antworten.E-Mail-Adresse aus Zeichenfolge extrahieren: ungültiger Prozeduraufruf oder Argument

Das Problem liegt in der emailC-Zeile, in der es mir sagt, dass es ein ungültiger Prozeduraufruf oder -argument ist.

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) 

    Dim mymail As Outlook.MailItem 
    Dim ns As Outlook.NameSpace 
    Set ns = Application.GetNamespace("MAPI") 
    Set mymail = ns.GetItemFromID(EntryIDCollection) 

    Substr = Trim(mymail.Subject) 
    If InStr(1, Substr, "TEST SUBJECT") > 0 Then 

     sText = mymail.Body 

     vText = Split(sText, Chr(13), -1, vbTextCompare) 
     'Find the next empty line of the worksheet 
     emailC = Trim(Left(sText, InStr(sText, "<") - 1)) 'Split(vText(0), " ", -1, vbTextCompare) 
     Resultstr = Trim(Mid(sText, InStr(sText, ">") + 1)) 
     senderstr = mymail.SenderEmailAddress 

     Call SendReply(emailC, mymail.Subject, Resultstr, senderstr) 

    End If 

End Sub 

Private Sub SendReply(Tostr, Subjectstr, Bodystr, senderstr) 
    Dim mymail2 As Outlook.MailItem 
    Set mymail2 = Application.CreateItem(olMailItem) 

    nam = mymail2.Session.CurrentUser.Name 

    With mymail2 
     .To = senderstr 
     .Subject = "RE: " & Subjectstr 
     .ReplyRecipients.Add emailC 
     .Body = Replace(Bodystr, Tostr, "", 1, -1, vbTextCompare) 

    End With 

    mymail2.Send 

End Sub 

Antwort

0

Höchstwahrscheinlich wird der Mail-Körper enthält keine '<' oder '>'. In diesem Fall wird die Instr0 zurückkehren, und Sie am Ende mit einem Befehl left(sText, -1) die exacly, welchen Fehler Sie

Für eine Vorspeise beschreiben werfen, Ihren Code ändern

dim p as integer 
p = InStr(sText, "<") 
if p = 0 then 
    debug.Print "no '<' found, text = :" & sText 
else 
    emailC = Trim(Left(sText, p - 1)) 
    .... 

Danach müssen Sie machen up your mind, was in einem solchen Fall zu tun (und sollten auch dann der Fall, dass Sie ein ‚<‘ aber kein ‚>‘ finden)

0

Vielleicht ist die < und > sind in sText dargestellt als &lt; und &gt;.

0

Es ist generell eine gute Übung, alle Ihre Variablen zu deklarieren, auch wenn sie nur Strings sind.

Ich würde dies für alle die Sie verwenden, die String verwenden. Ich würde auch Ihre Sendreply Routine wie folgt ändern:

Private Sub Sendreply (ByVal Tostr als String, ByVal SubjectStr als String, ByVal Bodystr als String, ByVal senderstr als String)

Aus dem Gedächtnis, wenn Sie dies nicht tun Tun Sie das oben, der Code weiß nicht, welcher Datentyp die Variablen sein sollten.

Verwandte Themen