August 11, 2022, 05:25:42

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Outlook2016, Immer gleichen störenden Textblock automatisch löschen

Begonnen von neutrino, März 18, 2020, 18:13:26

⏪ vorheriges - nächstes ⏩

neutrino

Hallo PhilS
habe die "Tabelle" in die hier einkopierte anonymisierte Worddatei kopiert und auch den Text minimiert. Mit HTML kenne ich mich nicht aus, aber dies ist strukturell das Original..

PhilS

Zitat von: neutrino am März 22, 2020, 18:44:10
habe die "Tabelle" in die hier einkopierte anonymisierte Worddatei kopiert
Das hilft nicht weiter.
In Outlook ein Rechtsklick auf die Email und dann "View Source" im Kontextmenü. Dann den relevanten Teil hier als Textdatei anhängen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

neutrino

März 22, 2020, 20:07:57 #17 Letzte Bearbeitung: März 22, 2020, 20:21:39 von neutrino
Habe unter "Quelle anzeigen" gefunden, was Du meinst. Den Text habe ich hier im Forum etwas anonymisiert mit Zeile1 und Zeile2

<table class=MsoNormalTable border=0 cellpadding=0><tr><td style='background:white;padding:.75pt .75pt .75pt .75pt'><table class=MsoNormalTable border=0 cellpadding=0><tr><td nowrap style='background:#FCF7B6;padding:.75pt .75pt .75pt .75pt'><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif;color:orange'>ACHTUNG: </span><span style='font-size:12.0pt;font-family:"Times New Roman",serif;color:black'>Zeile1 <br>Zeile2

Somit ist der Zeilenumbruch <br> gefunden. Habe den Code entsprechend in Deinen kopiert.

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim mi As MailItem
   
    Set mi = Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection)
    mi.Body = Replace(mi.Body, "ACHTUNG: Zeile1. <br>Zeile2.", "")
    mi.Save
   
End Sub


Wurde auch ohne zu meckern in Outlook angenommen (kein roter Code). Jetzt dachte ich, das war's. Aber leider doch nicht. Der Textblock bleibt komplett drin stehen. Das kann doch jetzt nur noch eine Kleinigkeit sein.



Beaker s.a.

Hallo,
Wie gesagt, habe kein OL um mir das anzuschauen, und mit HTML ist es auch nicht weit her. Aber wenn ich recht verstehe ist "MailItem.Body" doch nur ein HTML-String. Da reicht es doch nicht, nur den angezeigten Text zu entfernen. IMO muss da der gesamte HTML-String für diesen Bereich entfernt werden.
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim mi As MailItem
    Dim StringToReplace As String
   
    Set mi = Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection)
    StringToReplace = "<table class=MsoNormalTable border=0 cellpadding=0><tr><td style='background:white;padding:.75pt .75pt .75pt .75pt'><table class=MsoNormalTable border=0 cellpadding=0><tr><td nowrap style='background:#FCF7B6;padding:.75pt .75pt .75pt .75pt'><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif;color:orange'>ACHTUNG: </span><span style='font-size:12.0pt;font-family:"Times New Roman",serif;color:black'>Zeile1 <br>Zeile2"
    mi.Body = Replace(mi.Body, StringToReplace, "")
    mi.Save
   
End Sub


gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

neutrino

das hatte ich auch schon versucht. Die Formatierungsdetails (Schriftart usw) scheinen hier fehl am Platz zu sein. Aber leider bin ich Laie.. :-\

Beaker s.a.

Hallo,
Hänge an der String mal den Ende-Tag für die Tabelle dran (der sollte im
Original eigentlich auch vorhanden sein)
... Zeile1 <br>Zeile2 </table>
Ansonsten musst du den HTML-Text noch mal genauer analysieren.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

PhilS

Zitat von: neutrino am März 22, 2020, 21:35:54
das hatte ich auch schon versucht. Die Formatierungsdetails (Schriftart usw) scheinen hier fehl am Platz zu sein. Aber leider bin ich Laie.. :-\
In gewisser Hinsicht korrekt.
Ich hatte es bereits am Rande erwähnt: Es gibt zwei Eigenschaften, Body und HTMLBody, die den Text von Emails abbilden. Wenn du den original HTML-Quelltext durchsuchen/ändern willst, musst du HTMLBody verwenden.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Sebi

Hi Servus,

mach doch einfach mal einen Debug.Print auf den Body der Mail.

Debug.Print Asc(mi.Body)


Dann weisst du was du genau erstzen musst.

Vermutlich wird das vbcr oder vbcrlf sein.

Aber mit den Ascii Zeichen ist das kein Ding mehr.

Wenn du 2 Replace Befehle absetzt
Müsstest du das So derart anpassen:

    mi.Body = Replace(mi.Body, "Text Zeile1" , "")
    mi.Save
    mi.Body = Replace(mi.Body, "Text Zeile2" , "")
    mi.Save


Lg Sebi
Liebe Grüße Sebi

Sebi

Hier vielleicht auch eine Lösung, die auf jeden Fall rennen sollte:
 
Dim arr As Variant, i As Long
 
  'Liste der zu entfernenden Begriffe
  arr = Array("Text Zeile1 ", "Text Zeile2")
 
  For i = 0 To UBound(arr)
    mi.Body = Replace(mi.Body, arr(i), , "", , vbTextCompare)
  Next
  If mi.Saved = False Then
    mi.Body = Trim$(mi.Body)
    mi.Save
  End If
Liebe Grüße Sebi

neutrino

Hallo Sebi,
das mit den 2 Replacebefehlen nacheinander hat geklappt ! Super ! So ähnlich hatte PhilS es ja auch beschrieben, aber ich war nicht schlau genug es umzusetzen.

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim mi As MailItem
    Set mi = Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection)
    mi.Body = Replace(mi.Body, "Text Zeile1", "")
    mi.Save
    mi.Body = Replace(mi.Body, "Text Zeile2", "")
    mi.Save
   End Sub


Einziges kleines Manko ist nun noch, dass ich an der Stelle der Mailnachricht jetzt eine mehrzeilige Lücke habe.

Habe dann Deinen 2. Code probiert (ist die 1. Zeile richtig "interpretiert" ??):

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim arr As Variant, i As Long

  'Liste der zu entfernenden Begriffe
  arr = Array("Text Zeile1 ", "Text Zeile2")

  For i = 0 To UBound(arr)
    mi.Body = Replace(mi.Body, arr(i), , "", , vbTextCompare)
  Next
  If mi.Saved = False Then
    mi.Body = Trim$(mi.Body)
    mi.Save
  End If
End Sub


Hier meckert Outlook beim Kompilieren: Syntaxfehler in der roten Zeile.

Anmerkung:
So wirklich traue ich mich nicht, den funktionierenden ersten Code als festes Makro in "ThisOutlookSession" zu hinterlegen (weil Firma). Lieber würde ich es als lokales Makro unter eine Makro-Schaltfläche legen, um es nur bei Bedarf in einer geöffneten Mail zu nutzen. Ein Outlook Makro bedarf aber einer etwas anderen Syntax Sub()... Wäre das jetzt noch schwer zu lösen ?

VG
neutrino

Sebi

Ich glaube am einfachste wäre wenn du einfach mal eine Mail an uns senden würdest.
Oder es als .eml speicherst. Dann kann ich
Kur gerne mal den Inhalt anschauen.
Liebe Grüße Sebi

neutrino


Sebi

Hallo,
Also das ganze ist ein wenig tricky. Ursache hier ist im Endeffekt der Aufbau der beiden Zeilen in Form einer HTML Tabelle.
Im VBA solche Werte zu ersetzen ist nicht ganz einfach.

hier werden ' und " verwendet die müsstest du dann alle im ersetzen berücksichtigen. Deswegen wird der Replace befehl noch nicht funktionieren.

Dieses Konstrukt musst du entfernen. Und das Problem wird sein, je nach sendendem System wird die Sprache sich unterscheiden und der Fontstyle.

Replace(result, "'", "''", , , vbBinaryCompare)

<div class=WordSection1><table class=MsoNormalTable border=0 cellpadding=0><tr><td style='background:white;padding:.75pt .75pt .75pt .75pt'><table class=MsoNormalTable border=0 cellpadding=0><tr><td nowrap style='background:#FCF7B6;padding:.75pt .75pt .75pt .75pt'><p class=MsoNormal><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman",serif;color:orange'>ACHTUNG: </span><span lang=EN-US style='font-size:12.0pt;font-family:"Times New Roman",serif;color:black'>Zeile1. <br>Zeile2. </span><span lang=EN-US><o:p></o:p></span></p></td></tr></table></td></tr></table>
Liebe Grüße Sebi

PhilS

Zitat von: neutrino am März 24, 2020, 13:44:43
    mi.Body = Replace(mi.Body, arr(i), , "", , vbTextCompare)
[...]
Hier meckert Outlook beim Kompilieren: Syntaxfehler in der roten Zeile.

Dort sind ein paar Kommas zu viel. - Das lässt sich einfach mit einem Blick auf die Dokumentation zur Replace-Funktion beheben.

Zitat von: neutrino am März 24, 2020, 13:44:43
So wirklich traue ich mich nicht, den funktionierenden ersten Code als festes Makro in "ThisOutlookSession" zu hinterlegen (weil Firma). Lieber würde ich es als lokales Makro unter eine Makro-Schaltfläche legen, um es nur bei Bedarf in einer geöffneten Mail zu nutzen. Ein Outlook Makro bedarf aber einer etwas anderen Syntax Sub()... Wäre das jetzt noch schwer zu lösen ?
Ein VBA-Prozedur, die direkt als "Makro" aufgerufen werden kann, muss eine Public Sub ohne Argumente in einem normalen (nicht Klassen-) Modul sein.

Das Kernproblem ist aber, wie du an die Email kommst, die du bearbeiten willst. Bei dem von mir verwendeten Ereignis wird die EntryId der neuen Email mitgegeben. Diesen Komfort hast du bei einem normalen Makro nicht. Du müsstest dich auf die aktuell selektierte Email in einer Listendarstellung (Explorer) oder einem Inspector beziehen. - Das ist sicherlich möglich, aber den Code kann ich mir nicht ad-hoc aus dem Ärmel schütteln.


PS: Hat es eigentlich irgendeinen rationalen Grund, dass hier jeder meine wiederholten Hinweise auf die HTMLBody-Eigenschaft ignoriert?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Sebi

Hindi hat im Downloadbereich eine Outlookschnittstelle veröffentlicht.

Die ist nur in Access97 und müsste mal umgewandelt werden.
Da sind sicherlich nette Möglichkeiten enthalten und Mails von Access in Outlook zu handeln.

Lg Sebi
Liebe Grüße Sebi