[Excel] Via Excel in VBA einen bestimmten Termin finden

redryder

Grünschnabel
Hallo Wissende,
ich habe ein Problem bei einer VBA Programmierung,
in einem Excel-Wartungsregister werden die Wartungen eingetragen. Pro Gerät 1 Tabellenblatt. Ich möchte jetz, wenn ich eine Wartung durchgeführt habe das Datum um das Intervall erhöhen und dann den Termin in Outlook eintragen.
Soweit sogut. Das funktionieret super.
Jetzt kommt mein Problem (oder Herausforderung):
Ich muss jetzt im Outlook nach dem alten Termin (vorherige Wartung - steht ein paar zeilen über dem letzten (neue Wartung) Eintrag) suchen und diesen löschen.
Diverse Versuche via EntryID und StoreID auf den Termin zurück zu greifen scheiterten kläglich. Ich speichere die Entryid und die StoreID nach dem save des Termins.
Wenn ich jetzt dann nach der alten entryID suche findet VBA sie im Termine Ordner leider nicht....
Weiss jemand, wie ich die alten Termin löschen kann? Ich bin langsam am verzweifeln......
Evtl. gibt es ja auch andere Ansätze... müssten aber via VBA realisierbar sein.
 
Zeig doch mal den entsprechenden Code, den du schon hast. Es wird sonst schwer zu sagen, wo dein Problem liegt
 
Hi Yaslaw,
vielen Dank für die schnelle Antwort.
Mein Code sieht folgedermaßen aus:
Visual Basic:
Sub Excel_Control_Termin_suchen_deakt(strSID As String, strEID As String, OldDate As Date)

Dim myOutlook As Object, apptOutApp As Object, start As Date, EID As String, SID As String, LastRow As Long
Dim NS As Object, ObjItems As Object, anzahl As Integer, i As Integer, ObjFolder As Object, StoreID As String, aIt As Object

On Error GoTo ErrorHandler


start = Format(Range("h2"), "dd.mm.yyyy") & " " & Format(Range("l2"), "hh:mm") 'Hier steht das Datum des nächsten Termins formatiert wie es im Outlook angelegt wurde

LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

  Set myOutlook = CreateObject("Outlook.Application")
  Set NS = myOutlook.GetNamespace("MAPI")
  Set ObjFolder = NS.getdefaultfolder(9)
  Set ObjItems = NS.getdefaultfolder(9).items 'Eigener Kalender olfolderCalendar funktioniert nicht denke liegt am latebinding. early geht bei mir nicht, da ich die Microsoft Outlook 11 irgendwas.dll nicht zu den Verweisen hinzufügen kann - nicht vorhanden
  StoreID = ObjFolder.StoreID
   ' Hier jetzt der TestCode zum suchen leider findet er nix.... 
   'In der aufrufenden SUB muss ich noch nach der richtigen EntryID und StoreID suchen  um diese dann löschen zu können.
   'Ich wollte Anfangs mit der GetItemFromID(EntryID, StoreID) arbeiten, aber hier hat er auch nichts gefunden.
  anzahl = ObjItems.Count
  For i = anzahl To 1 Step -1
    'ObjItems(i).Delete     'erst aktivieren, wenn sicher
    Debug.Print i, ObjItems(i), ObjItems(i).start  'kann dann entfernt werden
    If ObjItems(i).EntryID = strEID Then
        ObjItems(i).Delete
    End If
    'If InStr(1, ObjItems(i), "Wartung") > 0 Then
    '    MsgBox "Wartung enthalten"
    'End If
    'SID = Left(ObjItems(i).start, InStr(ObjItems(i).start, " ") - 1)
    'If SID = OldDate Then
    '    MsgBox "Datum " & OldDate & " enthalten"
    'End If
    'Debug.Print i; " " & ObjItems(i).EntryID
    'Debug.Print ObjItems(i).Parent.StoreID
  Next i

Set NS = myOutlook.GetNamespace("MAPI")
NS.Logon


ErrorHandler:
    MsgBox Err.Description & vbLf & Err.Number
    Err.Clear

End Sub

So, ich hoffe, es ist nicht zu umständlich programmiert und DU kannst es lesen ;-).
Vielen Dank für Deine Hilfe
 
Zuletzt bearbeitet von einem Moderator:
Habs mal getestet. Sollte eigentlich schon gehen.
Das Problem könnte sein, dass die Termine mal verschoben wurde.
Such doch mal nur nach der eid und lass die sid weg.

Visual Basic:
Public Sub searchOtlAppointment()
    Dim eid     As String:  eid = "00000000CFC2B51E80ABD211BB080000F63AD2E4070011D7687F873ED211BAE30000F63AD2E4000000AF21C80000F7AB31920A665A4399D34B39F0281D8B000B68500FAB0000"
    
    Dim otl     As Object:  Set otl = CreateObject("Outlook.Application")
    
    'Appointment auslesen
    Dim app     As Object:  Set app = otl.GetNamespace("MAPI").GetItemFromID(eid)
    
    MsgBox app.Subject
    
    Set app = Nothing
    Set otl = Nothing
End Sub
 
Hi danke, werde das gleich mal testen.

mal noch ne andere Frage, ich bekomm auch hier keine Lösung zu stande,
ich speichere beim Erstellen des Termins die EntryID und die Storeid jeweils in eine Excelzelle um sie dann in dem Code weiter zu verarbeiten.
Mein Problem ist, die richtige zu finden, da ich immer nach Datum und Wartung suchen muss, die aber leider in 2 verschiedenen Spalten stehen.
Tabelle:

Datum Wer Was Text EntryID StoreID
01.01.2014 ich Wartung bbbb 123 453
02.02.2014 DU Reparatur bbbbb
05.04.2014 ich Wartung bbbb 124 453

wenn ich jetzt den Termin der letzen Wartung löschen möchte, muss ich ja die letzte EntryID und StoreID an meine Lösch-Routine übergeben. Wie finde ich die denn? Ich glaub ich seh vor lauter Bäumen den Wald nicht.
Es soll gelten :
Pseudocode
Entryid, StoreID = Datum(01.01.2014) UND Text(Wartung)
wie finde ich die richtige Zeile?
 
Hi, ich nochmal
also Dein Code funktioniert super.
Termin wird gelöscht
Jetzt nur noch die such Routine, dann is es perfekt!!
Ach ja, verschoben werden die Termine eigentlich nicht.
Und uneigentlich werde ich die Benutzer anweisen, diese Wartungstermine nicht anzupacken. Sonst werden sie halt mit Erinnerungen genervt - das ist dann aber deren Problem.
 

Neue Beiträge

Zurück