Home-›Foren-›Outlook-›Outlook VBA-›Bestimmte Datei unter allen angehängten Dateien finden
- This topic has 1 Antwort, 1 Stimme, and was last updated 17:02 um 25. Juli 2011 by Unbekannt.
- AutorBeitrag
- 25. Juli 2011 um 09:52 #54058UnbekanntParticipant
Hallo Experten!
Ich bekomme im Outlook Mails von Kunden mit immer den gleichen Anhängen. Nun muss ich jeweils einen bestimmten Anhang abspeichern und zwar eine Excel-Datei, die immer gleich heisst. Damit ich sie unterscheiden kann, muss ich ihr die Kundennummer voranstellen, die ich in der Datei auf der Tabelle \”Lieferschein\” finde. Mit nachfolgendem Makro suche ich in den Anhängen nach der Datei \”Repo\”, öffne sie und speichere sie unter dem neuen Namen ab.
Soweit funktioniert der Code. Nur wenn die gesuchte Datei nicht dem ersten Anhang entspricht, wird die Datei nicht abgespeichert. Kann mir jemand helfen, wie ich den Code anpassen muss, damit die Datei unter allen Anhängen gefunden wird?
Ausserdem hänge ich am Ende des neuen Dateinamens noch das entsprechende Quartal an, welches ich ebenfalls auf dem Lieferschein finde (Zelle H11). Dort ist das Quartal im Format \”30.06.2011\” gespeichert. Ich möchte im Dateinamen aber das Format \”201106\” verwenden: wie kann ich das erreichen?
Bin für jede Hilfe dankbar!
Gruss coko
PS: Ich muss Outlook aus Excel heraus steuern, weil bei uns in der Firma aus Sicherheitsgründen Makros in Outlook deaktiviert sind.
Hier mein Code:
Sub Anhang_Speichern()
Dim OLApp As Outlook.Application
Dim OLNS As Outlook.Namespace
Dim OLOrdner As MAPIFolder
Dim Nachricht As Outlook.MailItem
Dim AnhName As String
Dim TempOrdner As String
Dim ZielRepo As String
Dim Quartal As String
Dim KDNR As StringSet OLApp = Outlook.Application
Set OLNS = OLApp.GetNamespace(\”MAPI\”)
Set OLOrdner = OLNS.PickFolderTempOrdner = \”C:\\Testordner1\\\”
ZielRepo = \”C:\\Testordner2\\\”On Error Resume Next
For Each Nachricht In OLOrdner.Items
If Nachricht.UnRead = True Then
If Nachricht.Attachments.Count > 0 Then
AnhName = Nachricht.Attachments.item(1).DisplayName
If InStr(AnhName, \”Repo\”) > 0 Then
Nachricht.Attachments.item(1).SaveAsFile TempOrdner & AnhNameWorkbooks.Open TempOrdner & AnhName
KDNR = Sheets(\”Lieferschein\”).Range(\”C15\”)
Quartal = Sheets(\”Lieferschein\”).Range(\”H11\”)
ActiveWorkbook.SaveAs ZielRepo & KDNR & \”-\” & \”Repo_\” & Quartal & \”.xlsx\”
ActiveWorkbook.Close False
Kill TempOrdner & AnhNameEnd If
End If
End IfSet Nachricht = Outlook.ActiveInspector.CurrentItem
Nachricht.Subject = KDNR & \”-\” & Nachricht.Subject
Nachricht.UnRead = False
Nachricht.Save
Set OLOrdnerQuartal = OLNS.PickFolder
Nachricht.Move (OLOrdnerQuartal)Next Nachricht
MsgBox \” Alle Mails wurden bearbeitet!\”
End Sub
25. Juli 2011 um 17:02 #187114UnbekanntParticipantIch konnte inzwischen mein Problem – mit Hilfe von Tipps aus einem anderen Forum – lösen. Mein Code sieht nun so aus und funktioniert bei mir einwandfrei:
Sub Anhang_Speichern()
Dim OLApp As Outlook.Application
Dim OLNS As Outlook.Namespace
Dim OLOrdner As MAPIFolder
Dim Nachricht As Outlook.MailItem
Dim AnhName As String
Dim TempOrdner As String
Dim ZielRepo As String
Dim Quartal As String
Dim KDNR As StringSet OLApp = Outlook.Application
Set OLNS = OLApp.GetNamespace(\”MAPI\”)
Set OLOrdner = OLNS.PickFolderTempOrdner = \”C:\\Testordner1\\\”
ZielRepo = \”C:\\Testordner2\\\”On Error Resume Next
For Each Nachricht In OLOrdner.Items
If Nachricht.UnRead = True Then
Anzahl = Nachricht.Attachments.Count
If Anzahl > 0 Then
For i = 1 To Anzahl
AnhName = Nachricht.Attachments.item(i).Filename
If InStr(AnhName, \”Repo\”) > 0 Then
Nachricht.Attachments.item(i).SaveAsFile TempOrdner & AnhNameWorkbooks.Open TempOrdner & AnhName
BCNR = Sheets(\”Lieferschein\”).Range(\”C15\”)
Quartal = Sheets(\”Lieferschein\”).Range(\”H11\”)
ActiveWorkbook.SaveAs ZielRepo & KDNR & \”-\” & \”Repo_\” & Quartal & \”.xlsx\”
ActiveWorkbook.Close False
Kill TempOrdner & AnhName
End If
Next iEnd If
End IfSet Nachricht = Outlook.ActiveInspector.CurrentItem
Nachricht.Subject = KDNR & \”-\” & Nachricht.Subject
Nachricht.UnRead = False
Nachricht.Save
Set OLOrdnerQuartal = OLNS.PickFolder
Nachricht.Move (OLOrdnerQuartal)Next Nachricht
MsgBox \” Alle Mails wurden bearbeitet!\”
End Sub
Vielleicht hilft der Code ja sonst noch jemandem weiter 😉
Gruss coko - AutorBeitrag