Ausblick: Zeit bis zum Terminbetreff vormerken


1
  1. Ich möchte, dass dem Titel / Thema jedes Termins die Uhrzeit vorangestellt wird.
  2. Ich möchte, dass der Titel automatisch entsprechend der Uhrzeit des Ereignisses aktualisiert wird (Wenn ich das Datum ändere, gilt dies auch für das Datum des Titels).

Beispiel:

10:00-12:00 Meeting with Joe
  1. Der Versuch, eine eingebaute Methode zu finden, war erfolglos. Nichts an den Optionen, Einstellungen, Regeln. Ich habe die gesamte Oberfläche ziemlich durchforstet.
  2. Ein Makro ist wahrscheinlich der richtige Weg. Mein VB ist nicht vorhanden, obwohl ich keine Angst hätte zu erfahren, ob jemand Links zum Thema posten würde.
  3. Ich habe über die Google-Suche kein Ereignis zum Speichern von Terminen "nach" für den Kalender gefunden. Gibt es eine, mit der ich später ein Makro aktivieren könnte?

Ist das überhaupt möglich?



Antworten:


2

Das folgende Snippet macht den Job gut, schrieb es in ca. 3-4 Stunden und war ziemlich mühsam zu schreiben;)

Kommentare, wie der Code prägnanter und besser strukturiert werden kann, sind sehr willkommen.

Ich habe Kommentare zu den Teilen hinterlassen, die ich für zukünftige Ankömmlinge für etwas unklar hielt. Wenn Sie dies lesen und nichts verstehen, hinterlassen Sie einen Kommentar! :)

Dim WithEvents curCal As Items ' set var as the holder of Item events
Public lastSavedAppointmentStart As Date ' variable so we won't infinitely loop when saving Items
Public lastSavedAppointmentEnd As Date
Public justSaved As Boolean

' Some initial Startup Code from slipstick.com
' F5 while the cursor is in this sub (in the vba editor)
' will reload the so called "project"
Private Sub Application_Startup()
   Dim NS As Outlook.NameSpace
   Set NS = Application.GetNamespace("MAPI")
   Set curCal = NS.GetDefaultFolder(olFolderCalendar).Items
   Set NS = Nothing
   lastSavedAppointmentStart = Now()
   lastSavedAppointmentEnd = Now()

End Sub


Private Sub checkPrependtime(ByVal Item As Object)
    Dim isntLastAppt As Boolean
    isntLastAppt = isntLastSavedAppointment(Item)
    If justSaved = False And isntLastAppt Then
        If Not isTimePrepended(Item) Then
            Call saveLastAppointment(Item)
            Call prependTime(Item)
        Else
            Call removePrependedTime(Item)
        End If
    Else
        justSaved = False
    End If
End Sub

Function isntLastSavedAppointment(ByVal Item As Outlook.AppointmentItem) As Boolean
    isntLastSavedAppointment = lastSavedAppointmentStart <> Item.start Or lastSavedAppointmentEnd <> Item.End
End Function

Private Sub saveLastAppointment(ByVal Item As Outlook.AppointmentItem)
    justSaved = True
    lastSavedAppointmentStart = Item.start
    lastSavedAppointmentEnd = Item.End
End Sub

Private Sub removePrependedTime(ByVal Item As Outlook.AppointmentItem)
    Set lastSavedAppointment = Nothing
    Dim oldSubject As String
    ' Cut out the time part of the subject (e.g. 13:00-15:00 Meeting with Joe)
    ' returns Meeting with Joe
    oldSubject = Mid(Item.Subject, 13, Len(Item.Subject))
    Item.Subject = oldSubject
    Item.Save
End Sub

Private Sub prependTime(ByVal appt As Outlook.AppointmentItem)
    Dim newSubject As String, apptStart As Date, apptEnd As Date
    Set lastSavedAppointment = appt
    newSubject = Format(appt.start, "hh:mm") & "-" & Format(appt.End, "hh:mm") & " " & appt.Subject
    appt.Subject = newSubject
    appt.Save
End Sub

' Check whether the third char is :
' If time is prepended (e.g. Item.subject is something like
' "12:00-13:00 Meeting with joe" Then third char is always :)
Function isTimePrepended(ByVal Item As Outlook.AppointmentItem) As Boolean
    isTimePrepended = InStr(3, Item.Subject, ":")
End Function


' BEGIN event handlers
Private Sub curCal_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.AppointmentItem Then
        Call prependTime(Item)
    End If
End Sub

Private Sub curCal_ItemChange(ByVal Item As Object)
    If TypeOf Item Is Outlook.AppointmentItem Then
        Call checkPrependtime(Item)
    End If
End Sub

' END event handlers

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.