2016-03-25 7 views
0

Wenn eine E-Mail mit einem Nachrichtentext mit fünf Zahlen eingegeben wird, möchte ich diesen durch eine URL ersetzen, um eine anklickbare Verknüpfung zum Datensatz zu erstellen. Siehe Code unten:Ersetzen mehrerer Zeichenfolgen im Outlook-E-Mail-Textkörper mit Hyperlinks mithilfe von RegEx

Ich habe 2 Probleme.

  1. mit dem Code unten, ich bin nur in jeder E-Mail ersetzt eine Zeichenfolge erhalten, die in kommt. Also, wenn ich einen Satz von 4 fünf Nummer-IDs hatte, nur würde man in einen Hyperlink umgewandelt werden.

  2. Das Skript scheint alle Formatierungen der eingehenden E-Mail zu ruinieren. Im Idealfall sollte alles, was ich ändern will, ist die 5 Zahlenfolge in einen Hyperlink, der Rest der Formatierung gleich bleiben, mit Null Zeilenumbrüche oder Wagenrücklauf, etc ...

    Option Explicit 
    
    Sub InsertHyperLink(MyMail As MailItem) 
        Dim body As String, re As Object, match As Variant, slgLink As String 
        body = MyMail.body 
        slgLink = "http://lnet/servicelog/serviceLogInfo.jsf?slNumber=" 
    
        Set re = CreateObject("vbscript.regexp") 
        re.Pattern = "[0-9][0-9][0-9][0-9][0-9]" 
    
        For Each match In re.Execute(body) 
         body = Replace(body, match.Value, "<p><a href=" & Chr(34) & slgLink & Right(match.Value, 5) & Chr(34) & ">" & Right(match.Value, 5) & "</a></p>", 1, -1, vbTextCompare) 
        Next 
    
        MyMail.HTMLBody = body 
        MyMail.Save 
    End Sub 
    

Antwort

0

Sie sind Lesen von Nur-Text-Text-Eigenschaft, aber Sie setzen HTMLBody. Lesen Sie stattdessen den HTMLBody.

+0

Das behebt das Formatierungsproblem, danke! Irgendwelche Ideen, warum es nicht richtig läuft? – Florin

+0

Ich weiß nicht über Regex, sorry. –

0

die Lösung mit etwas Hilfe von \u\pmo86 gefunden, hier ist der richtige Weg, es (viel elegantere) zu tun:

Sub InsertHyperLink(MyMail As MailItem) 
    Dim slgLink As String, re As Object 
    slgLink = "<a href=""http://lnet/servicelog/serviceLogInfo.jsf?slNumber=$1"">$1</a>" 

    Set re = CreateObject("vbscript.regexp") 
    re.Pattern = "(\b(\d{5})\b)" 
    re.Global = True 

    MyMail.HTMLbody = re.Replace(MyMail.HTMLbody, slgLink) 
    MyMail.Save 
    Set re = Nothing 
End Sub 

Wie Sie im Beispiel sehen kann, ist es in integrierte Funktionen mit $ bis Rückreferenzierung 1, referenziert das Match direkt.

+0

Ich versuche dieses Stück Code, aber wie mache ich eigentlich Outlook für jede E-Mail? –