Mail: Text einfärben

Moderator: ModerationP

Mail: Text einfärben

Beitragvon Fennek » 14. Sep 2021, 20:55

Hallo,

in einer empfangenen Mail sollen ausgewählte Keyword farbig markiert werden.

Zum Test wird ein Email mit 2x "=lorem(4,2)" verwendet.

Der folgende Code läuft fehlerfrei, aber ändert keine Farben:

Code: Alles auswählen
Sub Find_Keyword()
Dim EML As MailItem
Set EML = ActiveExplorer.Selection.Item(1)

sWd = Array("ipsum", "viverra")

EML.Display
With ActiveInspector.WordEditor
   
    For Each s In sWd
       
        With .Content.Find
            .Wrap = wdFindStop
            .Text = s
            .Execute
            Do While .Found And i < 10
               Set rng = .Parent
               'rng.HighlightColorIndex = wdYellow
               rng.Font.Color = wdred
               .Execute
                i = i + 1
            Loop
            i = 0
        End With
    Next s

End With
Set EML = Nothing
End Sub


Sieht jemand den Fehler?

Danke

mfg
Benutzeravatar
Fennek
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 824
Registriert: 12. Feb 2016, 18:56

Re: Mail: Text einfärben

Beitragvon DerHoepp » 15. Sep 2021, 10:47

Moin Fen,

Im Word-Forum wärest du wahrscheinlich schneller fündig geworden.
Die Font.Color-Eigenschaft hätte gern einen RGB wert und keine Farbkonstante. Die Farbkonstante wdRed wird nach 6 aufgelöst und ist damit eine ziemlich dunkle Farbe, die dein Auge nicht von Schwarz unterscheiden kann (auch wenn die Flying help dir eine Color-Konstante zur auswahl gibt). Wenn ich das noch recht in Erinnerung habe ist die Font.Color-Eigenschaft aber eigentlich ohnehin deprecated und sollte durch Font.Fill.ForeColor.RGB oder noch besser direkt durch die Zuweisung eines Styles ersetzt werden:
Code: Alles auswählen
rng.Font.Fill.ForeColor.RGB = RGB(255,0,0)
rng.Style = "Hervorhebung"

Ich würde allerdings auf das Mehrfache Find verzichten und direkt die Ersetzen-Methode verwenden, mit der du alle Fundstellen direkt einheitlich formatieren kannst:
Code: Alles auswählen
Option Explicit

Sub testens()
    Dim s As Variant
    Dim swd As Variant
    swd = Array("Lorem", "metus", "nulla")
   
    For Each s In swd
        With ActiveDocument.StoryRanges(wdMainTextStory).Find
            .ClearFormatting
            .MatchWildcards = True
            .Replacement.ClearFormatting
            .Replacement.Style = ActiveDocument.Styles("Intensive Hervorhebung")
            .Text = "(" & s & ")"
            .Replacement.Text = "\1"
            .Execute Replace:=wdReplaceAll
        End With
    Next s
End Sub


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9720
Registriert: 14. Mai 2013, 11:08

Re: Mail: Text einfärben

Beitragvon Fennek » 15. Sep 2021, 11:54

@DerHoepp

Danke, in Word ist das perfect.

In Outlook habe ich zuerst einen Verweis auf "MS Word 2016 Object library" gesetzt.

In Outlook bleibt es (nach ein paar Änderungen) an ".Execute Replace:=wdReplaceAll" hängen. Die Fehlermeldung ist "Befehl nicht verfügbar", das bezieht sich wohl auf den "Replace"-Teil.

Der aktuelle Code:

Code: Alles auswählen
Sub Find_Keyword() '2x =lorem(4,2)
Dim EML As MailItem
Set EML = ActiveExplorer.Selection.Item(1)
Dim Doc As Word.Document
sWd = Array("ipsum", "viverra")

EML.Display
'With ActiveInspector.WordEditor
Set Doc = EML.GetInspector.WordEditor
With Doc
Debug.Print Doc.content 'ok
    For Each s In sWd
       With .content.Find        '.StoryRanges(wdMainTextStory).Find
            .ClearFormatting
            .MatchWildcards = True
            .Replacement.ClearFormatting
            .Replacement.Style = .Parent.Parent.Styles("Intensive Hervorhebung")
            .Text = "(" & s & ")"
            .Replacement.Text = "\1"
            .Execute Replace:=wdReplaceAll
        End With
end with
end sub


mfg
Benutzeravatar
Fennek
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 824
Registriert: 12. Feb 2016, 18:56

Re: Mail: Text einfärben

Beitragvon DerHoepp » 15. Sep 2021, 13:02

Hallo Fen,

das Funktioniert bei mir bei einer geöffneten Mail, auch ohne Verweis auf Word:
Code: Alles auswählen
Option Explicit

Sub test()
    With ActiveInspector.WordEditor
        With .Range.Find
            .clearformatting
            .Replacement.clearformatting
            .matchwildcards = True
            .Replacement.Style = .Parent.Parent.styles("Hervorhebung")
            .Text = "(pede)"
            .Replacement.Text = "\1"
            .Execute Replace:=2  'wdReplaceAll
        End With
    End With
End Sub


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9720
Registriert: 14. Mai 2013, 11:08

Re: Mail: Text einfärben

Beitragvon Fen » 15. Sep 2021, 13:16

Danke

Hier kommt erneut "Befehl nicht verfügbar" bei dem "Replace" in ".Execute".

Vielleicht liegt es an der Office-Version 2019 64bit.
Fen
 

Re: Mail: Text einfärben

Beitragvon DerHoepp » 15. Sep 2021, 13:28

Hallo nochmal,

das ist merkwürdig. Funktioniert das Kompilieren denn? Und welche Fehlernummer erhältst du? Hast du es auch mit .Range.Find Statt .Content.Find versucht? und was ist wenn du den benannten Parameter weglässt und stattdessen Kommas zählst:
Code: Alles auswählen
            .Execute , , , , , , , , , , 2


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9720
Registriert: 14. Mai 2013, 11:08

Re: Mail: Text einfärben

Beitragvon Fen » 15. Sep 2021, 14:02

Hallo,

nein, keine Änderung.

Die EMail ist als eigenes Fenster geöffnet, ausser "ipsum" ist der Code identisch:

Code: Alles auswählen
Sub test()

    With ActiveInspector.WordEditor
        With .Range.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .MatchWildcards = True
            .Replacement.Style = .Parent.Parent.Styles("Hervorhebung")
            .Text = "(" & "ipsum" & ")"
            .Replacement.Text = "\1"
            '.Execute Replace:=2  'wdReplaceAll
            .Execute , , , , , , , , , , 2
        End With
    End With
End Sub


Frust ..., da brauche ich wohl einen anderen Ansatz.

Vielen Dank
Fen
 

Re: Mail: Text einfärben

Beitragvon DerHoepp » 15. Sep 2021, 15:36

Merkwürdig,

naja, der Ansatz über das mehrfache Wiederholen von .Find.Execute ohne Replacement sollte ja weiter funktionieren. Du musst dann nur die Rückgaberange mit einer entsprechenden .Font-Formatierung oder einem Style versehen. Hast du mal das gesamte Projekt kompiliert? Oder hast du irgendwo sonst eine Replace-Methode geschrieben?

Viele Grüße
derHöpp

Nachtrag: Hast du mal die Inspector.IsWordMail-Eigenschaft überprüft?
Nachtrag2: Kannst du mal mit .Range(2,25).Font.Fill.ForeColor.RGB = RGB(200,100,100) gucken, ob du tatsächlich den Inspektor ansprichst, den du denkst:
Code: Alles auswählen
Option Explicit

Sub test()
    With ActiveInspector
        Debug.Print .Caption
        Debug.Print .IsWordMail
        If .IsWordMail Then
            With .WordEditor
                .Range(2, 25).Font.Fill.ForeColor.RGB = RGB(200, 100, 100)
            End With
        End If
    End With
End Sub
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9720
Registriert: 14. Mai 2013, 11:08

Re: Mail: Text einfärben

Beitragvon Fen » 15. Sep 2021, 16:13

Hallo,

ja, auf ".IsWordMail" hatte ich geprüft (wahr)

Ein "Debug.Print .range(2,25)" geht, aber auch mit FillColor wird die Farbe nichr geändert.

Eigentlich wollte ich "Range.HighlightColorIndex", die Antwort war "zur Zeit de-aktiviert". Per Hand ist "highlighten" aber möglich.

mfg
Fen
 

Re: Mail: Text einfärben

Beitragvon mmarkus » 16. Sep 2021, 16:00

Da würde ich doch noch zusätzlich im Word Forum vorstellig werden.

Was mir auffällt ist, dass keine Rückgabewerte von Methode ausgewertet werden.
Du kontrollierst also nicht, ob der Code erfolgreich ist.

Hast du dir mal angesehen, ob der HTML Body irgend welche Änderungen erkennen lässt?
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2142
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Mail: Text einfärben

Beitragvon mumpel » 16. Sep 2021, 16:59

Ich würde vorher den Inhalt mit "WholeStory" markieren und im markierten Text suchen. Als Ansatz: https://www.rholtz-office.de/outlook/em ... llen_teil2
Benutzeravatar
mumpel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8329
Registriert: 09. Jan 2005, 15:20
Wohnort: Lindau (B)

Re: Mail: Text einfärben

Beitragvon mmarkus » 17. Sep 2021, 18:37

@mumpel,
schöne Beispiele.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2142
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Mail: Text einfärben

Beitragvon theoS » 18. Okt 2021, 19:29

in einer empfangenen Mail sollen ausgewählte Keyword farbig markiert werden.

Also, wenn ich händisch in einer empfangenen Mail was ändern möchte, geht das nicht. Das geht erst, wenn ich die Mail mit "Antworten" in einen bearbeitbaren Modus versetze.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5722
Registriert: 19. Apr 2008, 00:14


Zurück zu Outlook Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast