PDA

Vollständige Version anzeigen : Mit VBA alle Elemente eines Kalenders löschen


Racefan1974
12.12.2017, 17:05
Hallo Forum-User,

der Bereich VBA-Programmierung in Outlook ist für mich Neuland.
Ich habe schon ein paar VBA-Skripte für Excel erstellt.

Ich möchte gerne per VBA folgendes erreichen:

Der Kalender "Geburtstag" soll ausgewählt werden.
Dort sollen alle Elemente gelöscht werden.

Wer kann mir eine Code dafür geben?

Ich danke für Eure Bemühungen.

DER RACEFAN

halweg
13.12.2017, 10:27
Ich tu mich schwer, für andere Code zu schreiben (muss ja getestet werden usw.), helfe aber gern:
Du brauchst die Auflistung des betroffenen Kalenders, z. B.
Set kalenderordner = Session.Folders(1).Folders("Geburtstage")
und eine Schleife zum Löschen
For Each kalendereintrag in kalenderordner.items
kalendereintrag.delete
Next kalendereintrag
Mit deinen VBA-Kenntnissen ist der Rest sicher Routine, zum Glück hat VBA ja zahlreiche Autovervollständigungsfunktionen.

Racefan1974
13.12.2017, 11:24
Hallo halweg,

vielen Dank für Deinen Tipp:

Ich habe das mal in nachfolgendem Code eingebaut. In Deiner Codezeile kommt weiterhin Laufzeitfehler Objekt nicht gefunden.
Ich habe einen Exchange-Server. Vielleicht passt der Code dazu nicht?
Vielleicht kannst Du nochmal schauen?
Danke und Grüße.


Sub TEST_Geburtstage_aktualisieren()
Dim Kalender As MAPIFolder
Dim Ordner As MAPIFolder
Dim OrdnerListe As Folders

Set OrdnerListe = Application.Session.Folders
Set Ordner = OrdnerListe.Item("Meier@Firma.com")
Set Kalender = Session.Folders(1).Folders("Geburtstag") ''' Hier kommt Laufzeitfehler Objekt nicht gefunden!!!
MsgBox Kalender
End Sub

Racefan1974
13.12.2017, 11:28
Noch eine Hinweis:

Der Kalender Geburtstag hängt in der Struktur unterhalb von Kalender.
Ich vermute das man das man das in VBA auch so angeben muß.
Aber wie?

halweg
13.12.2017, 11:36
Die Variablen Ordner und Ordnerlist kannst du dir sparen.
Du brauchst ja nur einen bestimmten Ordner.
Bei mir läuft das wie gesagt über die Session.Folders Auflistung. Natürlich musst du dabei genau deine Namen und deine Struktur verwenden, also z. B.
set geburtstagskalender = Session.Folders(1).Folders("Kalender").Folders("Geburtstage")

Dafür musst du die Struktur deiner Ordner kennen.
Folders(1) meint die oberste pst-Datei bei mir, da musst du schauen, was bei dir ganz oben in der Ordnerhierarchie steht oder einen Namen statt der 1 angeben.

Und wahrscheinlich wird auch "Msgbox Kalender" nicht funktionieren, eher Kalender.name oder was auch immer die VBA da als Eigenschaft bietet.

Racefan1974
13.12.2017, 11:48
Hallo Halweg,

ich bin schon dank Deiner Hilfe weitergekommen. Unten der neue Gesamtcode. Auch msg hat funktioniert.
Leider löscht der nur die Hälfte der Kalenderitems.
Es kommt auch keine Fehlermeldung.
Ich mußte das mehrfach laufen lassen damit alle Einträge gelöscht werden. Jedes mal wurde nur die Hälfte gelöscht.
Hast Du da noch eine Idee?
Hast Du auch eine Code um neue Kalendereinträge in den gleiche Kalender aus einer CSV zu importieren?

Nochmals vielen Dank, hilft mir sehr!

Sub Geburtstage_aktualisieren()
Dim Ordner, Kalender As MAPIFolder
Dim OrdnerListe As Folders
Dim Kalendereintrag As Object

Set OrdnerListe = Application.Session.Folders
Set Ordner = OrdnerListe.Item("Meier@Firma.com")
Set Kalender = Session.Folders(1).Folders("Kalender").Folders("Geburtstag")
'MsgBox Kalender

''' Alle Kalendereinträge löschen'''
For Each Kalendereintrag In Kalender.Items
Kalendereintrag.Delete
Next Kalendereintrag
End Sub

halweg
13.12.2017, 12:26
Nach wie vor verstehe ich nicht, warum du Variablen/Objekte ("Ordner", "Ordnerlist") deklarierst, die du nicht verwendest.
Was die nicht gelöschten Einträge angeht, kann ich nur raten. Einerseits könnte es sein, dass du in deiner Kalenderansicht auch Einträge fremder Ordner siehst. Oder im Zusammenhang mit Exchange gibt es ein Schreibverbot. Oder die Einträge sind automatisch generiert.
Du müsstest also ermitteln, was die Gemeinsamkeit der nicht gelöschten Einträge ist.
Aber du kannst natürlich auch über das Direktfenster erst mal die Betreffs aller im betroffenen Kalenderorder enthaltenen Einträge anzeigen lassen und diese Liste prüfen.

Racefan1974
13.12.2017, 18:17
Habe die nicht benötigen Variablen entfernt.

Hast Du noch einen Tipp zum Import von Kalendereinträgen aus einer CSV-Datei?

Wäre super.

Danke!

halweg
13.12.2017, 18:50
Das habe ich noch nicht gemacht, da müsste ich genauso basteln wie du.

Racefan1974
13.12.2017, 20:50
OK und Danke!