2016-09-18 1 views
3

Je voudrais répondre à un formulaire Web extrayant l'adresse e-mail du formulaire.Extrait Adresse e-mail d'une table en .HTMLbody

La forme Web est dans une table, ainsi la fonction ParseTextLinePair() renvoie des espaces vides en tant qu'adresse de messagerie dans la colonne à côté de l'étiquette.

Comment puis-je extraire l'adresse électronique d'un formulaire Web?

Sub ReplywithTemplatev2() 
Dim Item As Outlook.MailItem 
Dim oRespond As Outlook.MailItem 

'Get Email 
    Dim intLocAddress As Integer 
    Dim intLocCRLF As Integer 
    Dim strAddress As String 

Set Item = GetCurrentItem() 

If Item.Class = olMail Then 

     ' find the requestor address 
     strAddress = ParseTextLinePair(Item.Body, "Email-Adresse des Ansprechpartners *") 


' This sends a response back using a template 
Set oRespond = Application.CreateItemFromTemplate("C:\Users\Reply.oft") 

With oRespond 
    .Recipients.Add Item.SenderEmailAddress 
    .Subject = "Your Subject Goes Here" 
    .HTMLBody = oRespond.HTMLBody & vbCrLf & _ 
       "---- original message below ---" & vbCrLf & _ 
       Item.HTMLBody & vbCrLf 

' includes the original message as an attachment 
    ' .Attachments.Add Item 

    oRespond.To = strAddress 

' use this for testing, change to .send once you have it working as desired 
    .Display 


End With 

End If 
Set oRespond = Nothing 

End Sub 

Function GetCurrentItem() As Object 
    Dim objApp As Outlook.Application 

    Set objApp = Application 
    On Error Resume Next 
    Select Case TypeName(objApp.ActiveWindow) 
     Case "Explorer" 
      Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1) 
     Case "Inspector" 
      Set GetCurrentItem = objApp.ActiveInspector.CurrentItem 
    End Select 

    Set objApp = Nothing 
End Function 

Function ParseTextLinePair(strSource As String, strLabel As String) 
    Dim intLocLabel As Integer 
    Dim intLocCRLF As Integer 
    Dim intLenLabel As Integer 
    Dim strText As String 

    ' locate the label in the source text 
    intLocLabel = InStr(strSource, strLabel) 
    intLenLabel = Len(strLabel) 
     If intLocLabel > 0 Then 
     intLocCRLF = InStr(intLocLabel, strSource, vbCrLf) 
     If intLocCRLF > 0 Then 
      intLocLabel = intLocLabel + intLenLabel 
      strText = Mid(strSource, _ 
          intLocLabel, _ 
          intLocCRLF - intLocLabel) 
     Else 
      intLocLabel = Mid(strSource, intLocLabel + intLenLabel) 
     End If 
    End If 
    ParseTextLinePair = Trim(strText) 
End Function 

Une image de la table pour clarifier.

enter image description here

+0

Vous pouvez avoir plus de chance avec 'Item.HTMLBody' en renvoyant une chaîne HTML structuré y Vous pourriez utiliser pour analyser les éléments '' appropriés du'

'. N'utilisez pas de fonctions de chaîne pour analyser HTML, cependant, il existe des bibliothèques spécialement conçues pour cela qui seraient mieux adaptées. Sinon, il peut y avoir une approche plus simple si vous pouvez faire une capture d'écran de ce à quoi ressemble cette table d'e-mail? –

+1

Capture d'écran ajoutée. Table avec 2 colonnes et 9 rangées. – user3772665

Répondre

3

Avez-vous regardé pour des expressions régulières dans VBA, je ne l'ai pas sur travaillé dans tout, mais voici un exemple.


Option Explicit 
Sub Example() 
    Dim Item As MailItem 
    Dim RegExp As Object 
    Dim Search_Email As String 
    Dim Pattern As String  
    Dim Matches As Variant 

    Set RegExp = CreateObject("VbScript.RegExp") 

    Pattern = "\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b" 

    For Each Item In ActiveExplorer.Selection 

     Search_Email = Item.body 

     With RegExp 
      .Global = False 
      .Pattern = Pattern 
      .IgnoreCase = True 
      Set Matches = .Execute(Search_Email) 
     End With 

     If Matches.Count > 0 Then 
      Debug.Print Matches(0) 
     Else 
      Debug.Print "Not Found " 
     End If 

    Next 

    Set RegExp = Nothing 

End Sub 

Ou Pattern = "(\S*@\w+\.\w+)" Ou "(\w+(?:\W+\w+)*@\w+\.\w+)"


Regular-expressions.info/tutorial

\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}\b Modèle simple qui décrit une adresse e-mail.

Une série de lettres, des chiffres, des points, souligne, signes de pourcentage et les traits d'union, suivi d'un arobase, suivie d'une autre série de lettres, des chiffres et des traits d'union, finalement suivi par un seul point et deux ou plusieurs lettres

[A-Z0-9._%+-]+alignement d'un seul caractère présent dans la liste ci-dessous

A-Zun seul caractère dans la plage comprise entre a et Z (Sensible à la casse)

0-9un seul caractère dans la plage comprise entre 0 et 9

._%+-un seul caractère dans la liste

@Correspond au caractère @ littéralement


quantificateurs

Udemy.com/vba-regex/

+---------+---------------------------------------------+------------------------------------------------------------+ 
| Pattern |     Meaning     |       Example       | 
+---------+---------------------------------------------+------------------------------------------------------------+ 
|   |            |               | 
| –  | Stands for a range       | a-z means all the letters a to z       | 
| []  | Stands for any one of the characters quoted | [abc] means either a, b or c.[A-Z] means either A, B, …, Z | 
|()  | Used for grouping purposes     |               | 
| |  | Meaning is ‘or’        | X|Y, means X or Y           | 
| +  | Matches the character one or more times  | zo+ matches ‘zoo’, but not ‘z’        | 
| *  | Matches the character zero or more times | “lo*” matches either “l” or “loo”       | 
| ?  | Matches the character zero or once   | “b?ve?” matches the “ve” in “never”.      | 
+---------+---------------------------------------------+------------------------------------------------------------+ 

Wikibooks.org/wiki/Visual_Basic/Regular_Expressions

https://regex101.com/r/oP2yR0/1

+0

génial merci qui fonctionne pour l'adresse e-mail. la raison pour laquelle je voulais utiliser une solution basée sur une table ou la solution ci-dessus est que je voudrais aussi récupérer l'entrée de la première ligne dans la deuxième colonne. – user3772665

+1

Apparaît la question sur l'extraction d'une adresse e-mail a été répondue de manière satisfaisante. Envisagez de l'accepter et de créer une nouvelle question. http://stackoverflow.com/help/accepted-answer – niton

+0

Que se passe-t-il quand il y a plus d'une adresse e-mail? – pablo808