Fragen zu Outlook-Makro um Mail-Inhalt auszulesen

Snooty

Commodore
Registriert
Dez. 2012
Beiträge
4.484
Hio,

ich möchte in Outlook bei Mails von Kinoreservierungen den Inhalt auslesen und bestimmte Strings (Uhrzeit, Kinofilm etc.) in den Betreff übernehmen.

Die Mails sind im HTML-Format mit Tabellen.
<td><b>Film:</b></td>
<td>Happy Death Day</td>
</tr>
<tr>
<td><b>Kino:</b></td>
<td>UFA - Kristallpalast Dresden</td>
</tr>
<tr>
<td><b>Saal:</b></td>
<td>Kino 3</td>
</tr>
<tr>
<td><b>Datum:</b></td>
<td>24.11.2017</td>
</tr>
<tr>
<td><b>Zeit:</b></td>
<td>19:45</td>
</tr>
<tr>
<!-- <td><b></b></td> -->
<td colspan="2"><b>Reihe / Platz 10 / 13 - 14<br/></b></td>
</tr>
</table>

<p>
Mit freundlichen Grüßen<br>
<i>Ihr UFA - Kristallpalast Dresden</i>

Ich hab den Inhalt jetzt mal in einer Variablen gespeichert: sInhalt = obj.Body

Ich hangele mich dann einfach mit "Zeichenzählen" durch den Inhalt um bestimmte Abschnitte zu finden; das klappt soweit auch, was mich zu der Frage bringt: Ist der Inhalt der Mail durch das sInhalt = obj.Body automatisch ein simpler String (mit Zeilenumbrüchen)?

Und zweitens: ich komme nicht an das richtige "Stringende" nach der Platzangabe, im Beispiel das Ende von: Reihe / Platz 10 / 13 - 14. Am Ende klebt dort immer irgendein unsichtbares Zeichen; vermutlich, weil hier eine neue HTML-Tabelle beginnt.
Bild 006.jpg


Wie komme ich an das letzte Zeichen vor dem <br/> in Reihe / Platz 10 / 13 - 14<br/></b></td>? Je nach Saal und Platz ist die Stringlänge natürlich variabel zwischen 9-12 Zeichen. Es funktioniert zwar auch so den Betreff zu ändern, aber lieber wäre es mir, den String sauber zu schneiden.
PHP:
Public Sub EditSubject()
  Dim obj As Object
  Dim Sel As Outlook.Selection
  Dim DoSave As Boolean
  Dim NewSubject As String
  Dim sInhaltSplit() As String
  Dim i As Integer
  Dim iTitelBeginn As Integer, iTitelEnde As Integer
  Dim iNummerBeginn As Integer, iNummerEnde As Integer
  Dim iSaalBeginn As Integer
  Dim iZeitBeginn As Integer
  Dim iPlatzBeginn As Integer, iPlatzEnde As Integer
  Dim sInhalt As String
  Dim sTitel As String, sNummer As String, sSaal As String, sPlatz As String
  Dim sNeuerBetreff As String

  If TypeOf Application.ActiveWindow Is Outlook.Inspector Then
    Set obj = Application.ActiveInspector.CurrentItem
  Else
    Set Sel = Application.ActiveExplorer.Selection
    If Sel.Count Then
      Set obj = Sel(1)
      DoSave = True
    End If
  End If


  sInhalt = obj.Body

  'Titel auslesen
  i = InStr(1, sInhalt, "Sie können Ihre Tickets für den Film ")
  iTitelBeginn = i + Len("Sie können Ihre Tickets für den Film ")
  iTitelEnde = InStr(iTitelBeginn, sInhalt, " am ")
  sTitel = Mid(sInhalt, iTitelBeginn, iTitelEnde - iTitelBeginn)

  'Abholnummer auslesen
  i = InStr(1, sInhalt, "Abholnummer ")
  iNummerBeginn = i + Len("Abholnummer ")
  iNummerEnde = InStr(iNummerBeginn, sInhalt, " abholen.")
  sNummer = Mid(sInhalt, iNummerBeginn, iNummerEnde - iNummerBeginn)

  'Kino auslesen
  i = InStr(1, sInhalt, "Kino ")
  iSaalBeginn = i + Len("Kino ")
  sSaal = Mid(sInhalt, iSaalBeginn, 1)

  'Zeit auslesen
  i = InStr(1, sInhalt, "Zeit:" & Chr(9))
  iZeitBeginn = i + Len("Zeit:" & Chr(9))
  sZeit = Mid(sInhalt, iZeitBeginn + 1, 5)

  'Plätze auslesen
  i = InStr(1, sInhalt, "Reihe / ")
  iPlatzBeginn = i + Len("Reihe / ") + 7
  iPlatzEnde = InStr(iPlatzBeginn, sInhalt, vbCrLf & "Mit freundlichen")
  sPlatz = Mid(sInhalt, iPlatzBeginn, iPlatzEnde - iPlatzBeginn)
  sPlatz = Replace(sPlatz, " / ", "-")
  sPlatz = Replace(sPlatz, " - ", "-")


sNeuerBetreff = sTitel & " - " & sNummer & " - " & sZeit & " - " & sSaal & "-" & sPlatz

  If Not obj Is Nothing Then
    NewSubject = InputBox("Neuer Betreff:", , sNeuerBetreff)
    If NewSubject <> "" Then
      obj.Subject = NewSubject
      If DoSave Then
        obj.Save
      End If
    End If
  End If
End Sub
[/SPOILER]
 
Zuletzt bearbeitet:
schneid halt einfach das letzte Zeichen des sPlatz-Strings ab?
 
Das klappt nicht, z. B. mit left(...,len(...)-1) ändert sich nichts. Auch nicht, wenn ich die Länge noch kürzer mache. trim könnte ich mal noch probieren.

edit: mit trim klappt es auch nicht. Ich denke, weil da ein Zeilenumbruch am Ende hängt; man sieht auch nicht das abschließende " wenn man mit der Maus über die Variable fährt.

Ich habe es jetzt so gelöst:
Code:
Do While Not IsNumeric(Right(sPlatz, 1))
  sPlatz = Left(sPlatz, Len(sPlatz) - 1)
Loop
 
Zuletzt bearbeitet:
Zurück
Oben