VBA - Problem mit Remove Funktion

thekorn

Erfahrenes Mitglied
Ich hab ein, wie ich finde, recht komisches Problem:
Ich habe einen VBA-Code gebastelt, der alle in einem Outlook-Posteingangsordner befindlichen E-mails nach Anhängen durchsucht, diese speichert, und sie dann aus dieser E-mail löscht.

Code:
Public Sub anhang_speichern_neu()
'On Error Resume Next

Set Outl_App = CreateObject("Outlook.Application")
Set Namens_R = Outl_App.GetNamespace("MAPI")
Set Akt_Ordner = Namens_R.GetDefaultFolder(olFolderInbox) 'posteingang auswählen
Set Mail_Ordner = Akt_Ordner.Folders("speichern test") 'Unterordner wählen falls vorhanden
Set element_mail = Mail_Ordner.Items

'***
For i = 1 To element_mail.Count
'MsgBox (element_mail(i))
Set myAttachments = element_mail(i).Attachments
    While myAttachments.Count > 0
        'MsgBox (myAttachments(1))
        myAttachments(1).SaveAsFile "C:\windows\desktop\sicherung\" & myAttachments.Item(1).DisplayName
        myAttachments.Remove 1 '###########Macht er nicht!
    Wend
Set myAttachments = Nothing

Next i

'objekte freigeben
Set Outl_App = Nothing
Set Namens_R = Nothing
Set Akt_Ordner = Nothing
Set Mail_Ordner = Nothing
Set element_mail = Nothing

End Sub

Funktioniert alles wunderbar, bis auf das löschen!
Das lustige daran: ich glaube den "Fehler" zu kennen!
Die Methode ".Remove" gibt es sowohl in der Outlook- als auch in der VBA-Bibliothek. Da Office standartmäßig (?!) der VBA-Bibliothek die höchste Priorität einräumt (Extras->Verweise), wird anscheinend immer die ".Remove"-Methode von VBA verwendet, und die entfernt nicht das Objekt als solches, sondern nur die Zuweisung darauf. Dagegen würde die Outlook ".Remove"-Methode das Objekt als solches, also den Anhang, löschen.
Wenn das also der Fehler ist, suche ich nach einer Möglichkeit, im Code die ".Remove"-Methode von Outlook zu verwenden.
Aber vielleicht habe ich ja auch einen ganz anderen Fehler gemacht!

Vielen Dank im vorraus!

gruß
thekorn
 
Ich hab' mal ein bisschen rumgetestet. Wenn ich das Makro zweimal durchlaufe, dann macht er, was er soll. Wenn die zu speichernde Datei noch nicht existiert, speichert er sie, löscht sie aber nicht von der mail...

Mmhhhh.... Woran das liegt, kann ich noch nicht sagen....
 
Zuletzt bearbeitet:
komisch

natürlich speicher er sie nicht in diesem ordner, sondern er soll alle attachments aus diesem ordner speichern.
bei mir funktioniert die remove-Methode immer noch nicht, komisch dass es bei dier geht.
Habe übrigens Office 2000, und starte das Makro unter Excel.

Danke für deine Hilfe

gruß
thekorn
 
Sorry, hab Dein Problem mit den Speichern falsch verstanden und deswegen meinen ersten Beitrag editiert. Probier' mal, was ich dort beschrieben habe...
 
irgendwie nicht!

Bei mir ist da der Wurm drin, es geht auch mit mehrmaligen ausführen nicht.
Löscht er die Anhänge bei dir wirklich?

gruß
thekorn
 
Ja, löscht er. Allerdings wird es erst sichtbar, wenn ich die mail erneut markiere. Da wird es eine refresh - oder updateMethode für den Ordner geben...
 
Schau dir mal dies an.
Ist allerdings mit VB6 und nicht VBA getestet.

Dim i As Long
Dim olApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim objNameSpace As Outlook.NameSpace
Dim Posteingang As Outlook.MAPIFolder

Set olApp = New Outlook.Application
Set oItem = olApp.CreateItem(olMailItem)



Set objNameSpace = Application.GetNamespace("MAPI")
Set Posteingang = objNameSpace.GetDefaultFolder(olFolderInbox) '.GetFolderFromID(strEntryID(trw.SelectedItem.Index), varStoreID(trw.SelectedItem.Index))

For Each oItem In Posteingang.Items
With oItem
For i = .Attachments.Count To 1 Step -1
.Attachments.Item(i).SaveAsFile App.Path & "\" & .Attachments.Item(i).DisplayName
.Attachments.Item(i).Delete
Next i
oItem.Close olSave
End With
Next oItem
 

Neue Beiträge

Zurück