Home-›Foren-›Outlook-›Outlook VBA-›Leerzeilen in Outlook per VBA löschen
- This topic has 12 Antworten, 3 Stimmen, and was last updated 18:07 um 31. März 2011 by JoeHan.
- AutorBeitrag
- 2. März 2008 um 15:28 #45033UnbekanntParticipant
Hi,
ich habe festgestellt, dass durch das Umwandeln einer Html e-mail in \“nur text\“ viele unnötige Leerzeilen entstehen. Könnte man ein Makro schreiben, dass es beim Klick auf antworten (Habe bereits für das Makro einen Antwortbutton in der Menüleiste erstellt) überflüssige Leerzeilen wie folgt entfernt:
Wenn nur eine Leerzeile zwischen 2 Sätzen steht bleibt alles so wie es ist, Bsp.:
text text text text text text text text
(Leerzeile)
text text text text text text text textWenn jedoch zwei, drei oder auch mehr Leerzeilen durch die automatische Umstellung auf \“nur Text\“ entstehen sollen diese automatisch beim Klick auf meinen Button entfernt werden, sprich:
aus:
text text text text text text text text
(Leerzeile)
(Leerzeile)
(Leerzeile)
(Leerzeile)
text text text text text text text textwird:
text text text text text text text text
(Leerzeile)
text text text text text text text textHoffe ich habe mich Anhand meiner, wie ich finde, gelungenen Aufführung Tongue verständlich gemacht Grin.
Freue mich auf eure Ideen.
MfG
frager
4. März 2008 um 07:16 #157887MichaelBauerParticipantDies müßte alles entfernen, was mehr als einen Zeilenumbruch hintereinander hat. Dabei werden zwei Zeilenumbrüche durch einen ersetzt:
While Instr(Text, vbcrlf & vbcrlf)>0
Text = Replace(Text, vbcrlf & vbcrlf, vbcrlf)
WendGgf müßtest Du das erweitern, wenn es auch Zeilenumbrüche gibt, die nur aus vbLF bestehen.
Viele Grüße
Michael Bauer5. März 2008 um 14:32 #157956UnbekanntParticipantHi,
erstmal Danke für den Code, leider bekomme ich den nicht richtig eingebunden, sprich es funktioniert nicht.
Wo muss der denn genau rein und muss da nicht sub … und end sub davor bzw. dahinter stehen?Ggf müßtest Du das erweitern, wenn es auch Zeilenumbrüche gibt, die nur aus vbLF bestehen.
Dies versteh ich um ehrlich zu sein auch nicht :S.
Hoffe, dass du mir da noch ein bischen helfen kannst.
MfG
frager
6. März 2008 um 07:13 #157984MichaelBauerParticipantRichtig, außenherum gehört dieses:
Public Sub IrgendeinName()
…
End SubDen Code kannst Du ins Modul \“DieseOutlookSitzung\“ schreiben. Zum aufruf könntest du Dir über Rechtsklick auf eine Symbolleiste/Anpassen/Befehle/Makros den Makronamen auf die Symbolleiste ziehen.
Um auch vbLF zu ersetzen, kopiere die gezeigte While-wend Schleife einfach und tausche vbCRLF durch vbLF.
Viele Grüße
Michael Bauer6. März 2008 um 14:22 #157996UnbekanntParticipantHab alles richtig gemacht, hab sogar ein anderes Makro über diesen Button laufen welches auch einwandfrei funktioniert.
Was kann ich denn nun noch machen?Hoffe du hast noch eine Idee?
Ich poste mal hier den gesamten Code, den ich Jetzt im Modul \“DieseOutlookSitzung\“ stehen habe. Vielleicht findest du so meinen Fehler.
Sub AnwortMail()
On Error Resume Next\’Benötigte Variablen
Dim myOlSelection As Outlook.Selection
Dim myOlMailItem As Outlook.MailItem
Dim NewMail As MailItem
Set myOlSelection = Application.ActiveExplorer.Selection\’Erzeugen einer neuen Email als Antwort
For Each myOlMailItem In myOlSelectionSet NewMail = myOlMailItem.Reply
If NewMail.BodyFormat = olFormatHTML Then
NewMail.BodyFormat = olFormatPlain
Else
End If
NewMail.DisplayWhile InStr(Text, vbCrLf & vbCrLf) > 0
Text = Replace(Text, vbCrLf & vbCrLf, vbCrLf)
WendNext
End SubPublic Sub IrgendeinName()
While InStr(Text, vbCrLf & vbCrLf) > 0
Text = Replace(Text, vbCrLf & vbCrLf, vbCrLf)
WendEnd Sub
Der obige Code wandelt eine Html Mail automatisch in eine \“nur Text\“ E-Mail um.
Hoffe sehr, dass du da was machen kannst.MfG
frager
6. März 2008 um 18:17 #158005UnbekanntParticipantwie kann ich also beide codes, sprich: deinen, der die Leerzeilen löscht und meinen, der E-Mails ins \“nur Text\“ format umwandet zusammenfassen, sodass ich beide über einen Button in der Symbolleiste ausführen kann.
Geht das überhaupt?
MfG
frager
6. März 2008 um 20:58 #158013MichaelBauerParticipantDeswegen hatte ich das Beispiel ohne Sub/End Sub formuliert; um die Schleife in den bestehenden Code einzubauen, brauchst Du das ja nicht.
Schau Dir bitte die Replace Funktion an: \“Text\“ war nur ein Beispiel. Dort muss der zu ersetzende Text übergeben werden, in diesem Fall also NewMail.Body.
Viele Grüße
Michael Bauer7. März 2008 um 14:22 #158028UnbekanntParticipantKann die leider nicht zusammenfügen. Dafür müsste ich wenigstens Basiswissen haben.
Muss da leider passen :S.MfG
frager
8. März 2008 um 17:54 #158061UnbekanntParticipantHab jetzt doch den Code einbinden können. Habe nur festgestellt, dass er wahrlos, wenn nur eine Leerzeile da ist, auch diese löscht, sprich:
TEXT TEXT TEXT
(Leerzeile)
TEXT TEXT TEXTwird zu:
TEXT TEXT TEXT
TEXT TEXT TEXTDas ist allerdings nicht gewollt.
Andererseits lässt er gelegentlich auch doppelte Leerzeilen stehen, sprich:TEXT TEXT TEXT
Leerzeile
Leerzeile
TEXT TEXT TEXTDas sollte auch nicht passieren.
Weisst du woran das liegen könnte und wie man es korrigieren könnte?
11. März 2008 um 07:52 #158179MichaelBauerParticipantZu 1: Vielleicht irrst Du Dich. In HTML sind die Abstände zwischen zwei Absätzen manchmal sehr groß; das sieht dann nur aus wie ein doppelter Zeilenumbruch, ist aber keiner.
Zu 2: Wie sieht der Code denn jetzt aus?
Viele Grüße
Michael Bauer16. März 2008 um 08:23 #158396UnbekanntParticipantich irre mich in dem Fall nicht.
Manchmal wird aus:
From: XXX [mailto:xxx@xxx.de]
Sent: Friday, March 14, 2008 11:44 AM
To: \’xxx\‘
Subject: xxxHi,
blabla bla
Daraus wird dann einfach:
From: XXX [mailto:xxx@xxx.de]
Sent: Friday, March 14, 2008 11:44 AM
To: \’xxx\‘
Subject: xxx
Hi,
blabla blaDies war nicht der Sinn.
Aus:
From: XXX [mailto:xxx@xxx.de]
Sent: Friday, March 14, 2008 11:44 AM
To: \’xxx\‘
Subject: xxxHi,
blabla bla
Soll:
From: XXX [mailto:xxx@xxx.de]
Sent: Friday, March 14, 2008 11:44 AM
To: \’xxx\‘
Subject: xxxHi,
blabla bla
Hier der momentane Code:
Sub AnwortMail()
On Error Resume Next\’Benötigte Variablen
Dim myOlSelection As Outlook.Selection
Dim myOlMailItem As Outlook.MailItem
Dim NewMail As MailItem
Set myOlSelection = Application.ActiveExplorer.Selection\’Erzeugen einer neuen Email als Antwort
For Each myOlMailItem In myOlSelectionSet NewMail = myOlMailItem.Reply
If NewMail.BodyFormat = olFormatHTML Then
NewMail.BodyFormat = olFormatPlain
Else
End If
While InStr(NewMail.Body, vbCrLf & vbCrLf) > 2
NewMail.Body = Replace(NewMail.Body, vbCrLf & vbCrLf, vbCrLf)
Wend
NewMail.DisplayNext
End SubHoffe dir fällt hier noch was ein :). Aber schonmal vorab vielen Dank für die bisherige Hilfe.
No. 1 :thumbup:MfG
frager
31. März 2011 um 18:00 #185705JoeHanParticipantHallo!
Gibt es hier was Neues? Ich kenne mich allerdings überhaupt nicht in VBA aus und bräuchte eine Dummy-Anleitung.
Das Problem mit den zusätzlich erzeugten Leerzeilen in HTML Emails wird auch hier diskutiert: https://www.mailhilfe.de/frage37279.html
Wer weiß eine (praktikable) Lösung für Outlook 2010? 1.) Bei Versenden von HTML Emails => 1 Leerzeile wird zu 3! 1 Zeilenumbruch wird zu 1 Leerzeile! 2.) Bei Email Versand wird langer Link umgebrochen und zerstört.
31. März 2011 um 18:07 #185707JoeHanParticipantDa der Autor ohne Registrierung gepostet hat, wird er vermutlich keine Benachrichtigung bei neuen Posts bekommen? Blöd.
Wer weiß eine (praktikable) Lösung für Outlook 2010? 1.) Bei Versenden von HTML Emails => 1 Leerzeile wird zu 3! 1 Zeilenumbruch wird zu 1 Leerzeile! 2.) Bei Email Versand wird langer Link umgebrochen und zerstört.
- AutorBeitrag