Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Outlook 2003 Makro für Betreff-Veränderung

Frage Entwicklung VB for Applications

Mitglied: TecAttack

TecAttack (Level 1) - Jetzt verbinden

08.03.2010, aktualisiert 12:51 Uhr, 8769 Aufrufe, 4 Kommentare

Hallo Zusammen,

Ich bin auf der Suche nach einem Makro der das Erhalten-Datum und den Namen (am besten nur den Nachnamen) des Absenders (also Von) in den Betreff vor dem eigentlichen Betreff-Thema kopiert.

Bsp. im Falle einer geöffneten email vor der Makro-Anwendung:

Von: Müller, Peter Gesendet: Fr 19.02.2010 15:21

Betreff: Week of 15 March townmeetings

nach der Makro-Anwendung:

Von: Müller, Peter Gesendet: Fr 19.02.2010 15:21

Betreff: 2010-02-19 Müller Week of 15 March townmeetings


Wie man am Bsp. sieht soll die Uhrzeit nicht kopiert werden, das Datum ein bestimmtes Format bekommen und jeweils Leerzeichen zwischen Datum Nachname und Betreffeintrag.

Im Internet konnte ich bisher niemanden finden der genau das gleiche Problem hatte. Was ich fand und meinem Problem etwas näher kommt seht ihr hier unten. Vielen Dank schon mal für eure Hilfe! Ich würd mich über wertvolle Tips oder gar eine Lösung sehr freuen!
01.
Public Sub InsertDate() 
02.
 
03.
'===================================================================== 
04.
' Fügt an den Anfang des Betreffs eines Elements das Datum ein. 
05.
' (c) Peter Marchert - http://www.outlook-stuff.com 
06.
' 2008-11-09 - Version 1.0.0 
07.
' 2008-11-21 - Version 1.0.1 
08.
'===================================================================== 
09.
 
10.
Dim objItem As Object ' Aktuelles Element 
11.
 
12.
'--------------------------------------------------------------------- 
13.
' Fehlerbehandlung wegen Set-Anweisungen ausschalten 
14.
'--------------------------------------------------------------------- 
15.
On Error Resume Next 
16.
 
17.
'--------------------------------------------------------------------- 
18.
' Aktuell geöffnetes Element refernzieren 
19.
'--------------------------------------------------------------------- 
20.
Set objItem = Outlook.ActiveInspector.CurrentItem 
21.
 
22.
'--------------------------------------------------------------------- 
23.
' Wenn kein Element geöffnet ist, dann markiertes verwenden 
24.
'--------------------------------------------------------------------- 
25.
If objItem Is Nothing Then Set objItem = Outlook.ActiveExplorer.Selection(1) 
26.
 
27.
'--------------------------------------------------------------------- 
28.
' Auch nichts markiert? 
29.
'--------------------------------------------------------------------- 
30.
If objItem Is Nothing Then GoTo ExitProc 
31.
 
32.
'--------------------------------------------------------------------- 
33.
' Mit dem Formatbefehl wird das Datum maschinell sortierbar 
34.
'--------------------------------------------------------------------- 
35.
objItem.Subject = Format(Date, "yyyy-MM-dd") & " " & objItem.Subject 
36.
 
37.
'--------------------------------------------------------------------- 
38.
' Änderung speichern 
39.
'--------------------------------------------------------------------- 
40.
objItem.Save 
41.
 
42.
ExitProc: 
43.
 
44.
'--------------------------------------------------------------------- 
45.
' Referenz auf Element löschen 
46.
'--------------------------------------------------------------------- 
47.
Set objItem = Nothing 
48.
 
49.
End Sub
Mitglied: Biber
08.03.2010 um 13:16 Uhr
Moin TecAttack,

ich hab mal deinen Codeschnipsel in Code-tags gesetzt, damit ich einzelne Zeilennummern ansprechen kann.
Du kannst einfach den fast schon fertigen neuen Betreff-String in Zeile 35 um den Absendernamen erweitern.

... 
'--------------------------------------------------------------------- 
' Mit dem Formatbefehl wird das Datum maschinell sortierbar 
'--------------------------------------------------------------------- 
' [alt] objItem.Subject = Format(Date, "yyyy-MM-dd") & "  " & objItem.Subject 
objItem.Subject = Format(Date, "yyyy-MM-dd") & "  [" & objItem.SenderName & "] " & objItem.Subject 
....
Anmerkungen:
Dringendst würde ich empfehlen, noch mindestens eine Prüfung mehr auf das "markierte Objekt" zu machen, nämlich ob es sich bei diesem Schlingel denn um eine Mail handelt (und nicht eine Notiz, eine Erinnerung oder einen kontakt in einem öffentlichen Ordner).
Dazu die Prüfung " If objItem.Class <> olMail Then GoTo ExitProc" bzw. "If objItem.Class <> 43 Then GoTo ExitProc" nach der heutigen Zeile 30 einbauen.

Zweite Anmerkung: ich baue den kompletten Absendernamen in den Betreff ein. Also den "Müller, Peter (Hugos Frittenbude)" oder wie immer der volltsändige angezeigte Name lauten mag.
Wenn du den Namen z.B. nur bis zum ersten auftretenden Komma anzeigen willst (e.g. "Müller" oder bis zur ersten Klammer-Auf ("Müller, Peter"), dann musst du selbst ein wenig feintunen.
Denn sowohl Komma als auch "(" = Klammer-Auf können, aber müssen nicht im String enthalten sein.
Ein Rausfieseln der (möglicherweise) Nachnamens als "das, was vor dem ersten Komma steht", könnte so oder ähnlich aussehen:

01.
... 
02.
Dim strDispSender as String 
03.
Dim i as Long 
04.
... 
05.
 ' wenn ein Komma im SENDERNAME enthalten ist.. 
06.
i = instr(1, objItem.Sendername, ",") 
07.
If ( i > 0) Then 
08.
  strDispSender = left( objItem.sendername, i-1) 
09.
Else 
10.
  strDispSender = objItem.sendername 
11.
End if 
12.
... 
13.
'... und / oder eine ähnliche Mimik für kürzen vor erster "("
[alles vollkommen ungetestet]

Grüße
Biber
Bitte warten ..
Mitglied: TecAttack
09.03.2010 um 10:37 Uhr
Guten Morgen Biber,

Vorab vielen Dank für all die Tipps, Tricks und Vorschläge!!!!

ich hab mal deinen Codeschnipsel in Code-tags gesetzt, damit ich einzelne Zeilennummern ansprechen kann.

Danke auch hierfür!

Du kannst einfach den fast schon fertigen neuen Betreff-String in Zeile 35 um den Absendernamen erweitern.
...
'---------------------------------------------------------------------
' Mit dem Formatbefehl wird das Datum maschinell sortierbar
'---------------------------------------------------------------------
' [alt] objItem.Subject = Format(Date, "yyyy-MM-dd") & " " & objItem.Subject
objItem.Subject = Format(Date, "yyyy-MM-dd") & " [" & objItem.SenderName & "] " &
objItem.Subject

Hab es fast genauso erweitert wie hier oben vorgeschlagen, d.h. hab nur "[" und "]" weggelassen. Danke für den Vorschlag! Ging auch!

Anmerkungen:
Dringendst würde ich empfehlen, noch mindestens eine Prüfung mehr auf das "markierte Objekt" zu machen,
nämlich ob es sich bei diesem Schlingel denn um eine Mail handelt (und nicht eine Notiz, eine Erinnerung oder einen kontakt
in einem öffentlichen Ordner).
Dazu die Prüfung " If objItem.Class <> olMail Then GoTo ExitProc" bzw. "If objItem.Class <> 43
Then GoTo ExitProc" nach der heutigen Zeile 30 einbauen.

Hab die hier oben zusätzliche Prüfung hoffentlich richtig eingesetzt. Hab das Makro an einem Outlooktermin in meinem Posteingang ausprobiert und es tut sich nichts. Unten ist der überarbeitete Code zu sehen.

Zweite Anmerkung: ich baue den kompletten Absendernamen in den Betreff ein. Also den "Müller, Peter (Hugos
Frittenbude)" oder wie immer der volltsändige angezeigte Name lauten mag.
Wenn du den Namen z.B. nur bis zum ersten auftretenden Komma anzeigen willst (e.g. "Müller" oder bis zur ersten
Klammer-Auf ("Müller, Peter"), dann musst du selbst ein wenig feintunen.
Denn sowohl Komma als auch "(" = Klammer-Auf können, aber müssen nicht im String enthalten sein.
Ein Rausfieseln der (möglicherweise) Nachnamens als "das, was vor dem ersten Komma steht", könnte so oder
ähnlich aussehen:

Dim strDispSender as String
Dim i as Long
...
' wenn ein Komma im SENDERNAME enthalten ist..
i = instr(1, objItem.Sendername, ",")
If ( i > 0) Then
strDispSender = left( objItem.sendername, i-1)
Else
strDispSender = objItem.sendername
End if
...
'... und / oder eine ähnliche Mimik für kürzen vor erster "("

Hab ich wie hier oben vorgeschlagen übernommen und auch ein wenig (für mich logische) abgeänderte Versionen ausprobiert. Aber irgendwie hab ich es nicht hinbekommen nur den Nachnamen darstellen zu lassen, es erscheint "Müller, Peter" im Betreff. Vielleicht kannst du mir da noch einen Tipp geben?

Bzgl. des Datums: Also im Code steht ja bloß "Date" und genaugenommen ist es offensichtlich das aktuelle Datum. Dieses Makro wird der Ablage für fast ausschließlich ältere emails dienen, d.h. irgendwan nach dem ich eine email erhalten habe werde ich individuell entscheiden ob ich eine email aus bestimmten Gründen ablegen muss. Weiterhin kann ich deshalb das Makro nicht über eine Regel in Outlook ausführen lassen, so dass z.B. emails bei Eingang automatisch verändert werden und somit auch das Eingangsdatum enthalten (wenn ich auf die email antworten würde müsste ich die Änderungen im Betreff rückgängig machen) (war bloß so ne Überlegung). Es wäre super wenn ich das Erhalten- bzw. Gesendet-Datum im Betreff hätte, statt dem aktuellem Datum. Ich hab auch schon rumprobiert und "Date" durch viele diverse Wortspiele wie "SendDate", "DateReceived", usw. ersetzt aber leider hat nichts davon funktioniert. Vielleicht kannst du mir auch hier einen ordentlichen Schubs Richtung Lösung geben?

Sehr wahrscheinlich hast du längst bemerkt, dass ich das Gegenteil eines VBA-Profis bin. Solange ich noch keine Zeit habe VBA intensiv zu lernen (enrsthaft, keine Ausrede) weiß ich jede Hilfe zu schätzen und hoffentlich lerne ich auf diese Weise so viel wie möglich.

Gruß
TecAttack

Hier der überarbeitete Code:
01.
Public Sub InsertDateAndSenderName() 
02.
 
03.
'===================================================================== 
04.
' Fügt an den Anfang des Betreffs eines Elements das Datum ein. 
05.
' (c) Peter Marchert - http://www.outlook-stuff.com 
06.
' 2008-11-09 - Version 1.0.0 
07.
' 2008-11-21 - Version 1.0.1 
08.
'===================================================================== 
09.
 
10.
Dim objItem As Object ' Aktuelles Element 
11.
Dim strDispSender As String 
12.
Dim i As Long 
13.
 
14.
'--------------------------------------------------------------------- 
15.
' Fehlerbehandlung wegen Set-Anweisungen ausschalten 
16.
'--------------------------------------------------------------------- 
17.
On Error Resume Next 
18.
 
19.
'--------------------------------------------------------------------- 
20.
' Aktuell geöffnetes Element refernzieren 
21.
'--------------------------------------------------------------------- 
22.
Set objItem = Outlook.ActiveInspector.CurrentItem 
23.
 
24.
'--------------------------------------------------------------------- 
25.
' Wenn kein Element geöffnet ist, dann markiertes verwenden 
26.
'--------------------------------------------------------------------- 
27.
If objItem Is Nothing Then Set objItem = Outlook.ActiveExplorer.Selection(1) 
28.
 
29.
'--------------------------------------------------------------------- 
30.
' Auch nichts markiert? 
31.
'--------------------------------------------------------------------- 
32.
If objItem Is Nothing Then GoTo ExitProc 
33.
 
34.
'--------------------------------------------------------------------- 
35.
' Aktuelles Datum [yyyy-mm-dd] und Absender hinzufügen 
36.
'--------------------------------------------------------------------- 
37.
 
38.
' [alt] objItem.Subject = Format(Date, "yyyy-MM-dd") & "  " & objItem.Subject 
39.
objItem.Subject = Format(Date, "yyyy-MM-dd") & "  " & objItem.SenderName & " " & objItem.Subject 
40.
 
41.
'--------------------------------------------------------------------- 
42.
' Nur das was vor dem Komma (soweit vorhanden) im SENDERNAME 
43.
' enthalten ist übernehmen 
44.
'--------------------------------------------------------------------- 
45.
 
46.
i = InStr(1, objItem.SenderName, ",") 
47.
If (i > 0) Then 
48.
  strDispSender = Left(objItem.SenderName, i - 1) 
49.
Else 
50.
  strDispSender = objItem.SenderName 
51.
End If 
52.
 
53.
'--------------------------------------------------------------------- 
54.
' Prüfung ob es sich um eine Email handelt oder nicht 
55.
'--------------------------------------------------------------------- 
56.
 
57.
If objItem.Class <> olMail Then GoTo ExitProc 
58.
 
59.
'--------------------------------------------------------------------- 
60.
' Änderung speichern 
61.
'--------------------------------------------------------------------- 
62.
objItem.Save 
63.
 
64.
ExitProc: 
65.
 
66.
'--------------------------------------------------------------------- 
67.
' Referenz auf Element löschen 
68.
'--------------------------------------------------------------------- 
69.
Set objItem = Nothing 
70.
 
71.
End Sub
Bitte warten ..
Mitglied: Biber
09.03.2010 um 11:20 Uhr
Moin TecAttack,

danke für die ausführliche Antwort.
Deine Erwartungshaltung mit dem "Anschubsen in Richtung Lösung" finde ich gut.
Aus meiner Sicht würde es auch nichts bringen, dir einen fertigen Code vor die Füße zu werfen, den du später auch bei kleinen Anpassungen nicht warten kannst - du solltest es auch verstehen.
Und vor allen selbst den Mut/die Neugier zum Experimentieren behalten.

Also, kleine Schubser:
  • das Datum, das du brauchst... am geeignetesten wäre das Datumsfeld "ReceivedTime" (Ja, es heißt "xxxTime"; ja, es ist ein Datumsfeld ->siehe unter "Redmond" oder "Praktikantenjobs").
  • Alternativdatum wäre das Datumsfeld "SentOn"... aber mit der Absendezeit tun sich neue Tücken auf. Mache es wie meine Praktikantinnen: achte nur auf die Zeit der Empfängnis, also "ReceivedTime".
  • das zweite Problem - du extrahierst zwar einen Teilstring des Absendernamens in die Variable "strDispSender", aber diese "strDispSender" wird nie in den neuen Betreff eingebaut.
Die jetzige Zeile 39 (ich hab nochmal Codetags nachgetragen *vorwurfsvoll gugg*), in der der neue Betreff zusammengeschrotet wird, muss NACH der "strDispSender"-Bastelei zu liegen kommen. Und dort muss statt "objItem.Sendername" nun die Variable "strDispSender" rein.

Grüße
Biber
Bitte warten ..
Mitglied: TecAttack
09.03.2010 um 17:04 Uhr
Hey Biber,

Habs mit deinen Schubsern geschafft, vielen Dank! Ich komme mir vor wie der König der Welt!
Nun hab ich schon die nächsten beiden Ideen, den Code zu erweitern und würde mich dann gegebenenfalls melden, falls ich der König es nicht selbst schaffe aber das wär ja wohl gelacht *lach lach* *lach lach*

Danke und Gruß
TecAttack

Hier der fertige und getestete Code:

01.
Public Sub InsertDate() 
02.
 
03.
'===================================================================== 
04.
' Fügt an den Anfang des Betreffs eines Elements das Datum und Nachnamen ein. 
05.
' 2008-11-21 - Version 1.0.0 
06.
'===================================================================== 
07.
 
08.
 
09.
Dim objItem As Object ' Aktuelles Element 
10.
Dim strDispSender As String 
11.
Dim i As Long 
12.
 
13.
'--------------------------------------------------------------------- 
14.
' Fehlerbehandlung wegen Set-Anweisungen ausschalten 
15.
'--------------------------------------------------------------------- 
16.
On Error Resume Next 
17.
 
18.
'--------------------------------------------------------------------- 
19.
' Aktuell geöffnetes Element refernzieren 
20.
'--------------------------------------------------------------------- 
21.
Set objItem = Outlook.ActiveInspector.CurrentItem 
22.
 
23.
'--------------------------------------------------------------------- 
24.
' Wenn kein Element geöffnet ist, dann markiertes verwenden 
25.
'--------------------------------------------------------------------- 
26.
If objItem Is Nothing Then Set objItem = Outlook.ActiveExplorer.Selection(1) 
27.
 
28.
'--------------------------------------------------------------------- 
29.
' Auch nichts markiert? 
30.
'--------------------------------------------------------------------- 
31.
If objItem Is Nothing Then GoTo ExitProc 
32.
 
33.
'--------------------------------------------------------------------- 
34.
' Nur das was vor dem Komma (soweit vorhanden) im SenderName 
35.
' enthalten ist übernehmen 
36.
'--------------------------------------------------------------------- 
37.
 
38.
i = InStr(1, objItem.SenderName, ",") 
39.
If (i > 0) Then 
40.
  strDispSender = Left(objItem.SenderName, i - 1) 
41.
Else 
42.
  strDispSender = objItem.SenderName 
43.
End If 
44.
 
45.
'--------------------------------------------------------------------- 
46.
' Aktuelles Datum [yyyy-mm-dd] und Absender hinzufügen 
47.
'--------------------------------------------------------------------- 
48.
 
49.
' [alt] objItem.Subject = Format(Date, "yyyy-MM-dd") & "  " & objItem.Subject 
50.
objItem.Subject = Format(objItem.ReceivedTime, "yyyy-MM-dd") & "  " & strDispSender & " " & objItem.Subject 
51.
 
52.
'--------------------------------------------------------------------- 
53.
' Prüfung ob es sich um eine Email handelt oder nicht 
54.
'--------------------------------------------------------------------- 
55.
 
56.
If objItem.Class <> olMail Then GoTo ExitProc 
57.
 
58.
'--------------------------------------------------------------------- 
59.
' Änderung speichern 
60.
'--------------------------------------------------------------------- 
61.
objItem.Save 
62.
 
63.
ExitProc: 
64.
 
65.
'--------------------------------------------------------------------- 
66.
' Referenz auf Element löschen 
67.
'--------------------------------------------------------------------- 
68.
Set objItem = Nothing 
69.
 
70.
End Sub
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
Kein Mailversand mit Outlook 2003 (15)

Frage von gjhammes zum Thema Outlook & Mail ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...