Aktuelle Seite:
/vba/vbpolaufgabe2.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003Getestet unter Outlook2000Getestet unter Outlook2003Getestet unter Win2000Getestet unter WinXP  
VBA-Code verfügbar: Ja
Beispiel anzeigen
Makro/Datei speichern
Print

Update
Aufgrund einiger Nachfragen habe ich das Beispiel  Aufgaben in Outlook eintragen zum einen als AddIn (Dokumentvorlage) erweitert und zum anderen kann die eingetragene Aufgabe am Ende in Outlook angezeigt werden (siehe Beispiel).

Mittels VBA lassen sich nicht nur Aufgaben und Abläufe innerhalb eines Office-Programmes erledigen und steuern sondern auch zwischen den Office-Programmen übertragen. Dabei ist es unter Office 2000 allerdings noch so, dass nicht jeweils das vollständige Objektmodell zur Verfügung steht und sich somit Einschränkungen hinsichtlich des steuerbaren Programmumfangs ergeben.

In diesem Beispiel wird gezeigt, wie sich aus Word heraus eine Aufgabe in (ein lokal installiertes) Outlook eintragen lässt. Dabei kann optional das gerade geöffnete Dokument als Aufgaben-Anhang mitgespeichert werden.

Eingabemaske Aufgabendaten

In der aktuellen Version werden nicht alle Möglichkeiten und Einträge einer Outlook-Aufgabe genutzt, sondern es soll eher der Anbindungsweg und das Eintragen der wichtigsten Informationen gezeigt werden.

Folgende Informationen können über die Userform erfasst und anschließend nach Outlook übermittelt werden:

  • Start-Datum
  • Fälligkeitsdatum
  • Erinnerungsdatum (relative Angabe) und Uhrzeit
  • Bearbeitungspriorität
  • Aufgaben-Kategorie
  • Aufgabenbetreff
  • Aufgabenbeschreibung
  • Aktuelles Dokument
  • Aufgabe am Ende in Outlook anzeigen

Wenn alle Informationen erfasst sind, muss zuerst eine Verbindung zu Outlook hergestellt werden. Dazu wird per Late binding das Outlook-Objekt angesprochen. Bei Late binding ist kein Verweis auf eine Microsoft Outlook x Object Library notwendig; allerdings müssen in diesem Fall alle Konstanten als Zahlenwerte angegeben werden.
Wenn Outlook bereits aktiv ist, wird diese Instanz verwendet, ansonsten wird eine neue geöffnet.

Anschließend wird ein neues Item vom Typ olTaskItem (Wert: 3) erzeugt. An dieses Objekt werden dann die in der Erfassungsmaske zusammengetragenen Informationen weitergegeben. Ist ein Erinnerungsdatum angegeben und liegt dies im angegebenen Datumsbereich, wird das Erinnerungsfeld aktiviert (.ReminderSet = True) und das Erinnerungsdatum eingetragen (.ReminderTime).
Zum Schluss wird das aktuelle Dokument, sofern angegeben, als Anhang an die Aufgabe angehängt und die Aufgabe gespeichert.

Sofern die Outlook-Instanz vom Makro erzeugt wurde, wird sie anschließend wieder geschlossen.

Wichtig
Damit das Beispiel funktioniert, wird (je nach verwendeter Office-Version) folgendes zusätzliches Steuerelement verwendet:

  • Kalender Steuerelement 9.0/10.0/11.0 (MSCAL.OCX)

Sollte es da zu Problemen kommen, prüft ob Ihr das Steuerelement in der Liste findet.

Damit der Outlook-Explorer am Ende mit den Aufgaben angezeigt werden kann, muss ein Explorer-Objekt in Outlook festgelegt werden. Wenn dies der Fall ist, kann er anschließend aufgerufen werden.
Dies erfolgt mit den folgenden Zeilen:

Set myNameSpace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(c_olFolderTasks)
Set myExplorer = myOlApp.ActiveExplorer
If TypeName(myExplorer) = "Nothing" Then
    Set myExplorer = myFolder.GetExplorer
End If
'Zeigt den Explorer mit dem Aufgabenordner an  
'myExplorer.Display  

Die Kernfunktion sieht dann folgendermaßen aus:

Function Dok2OLTask(dStart As Date, dEnd As Date, strCat As String, _  
 strSub As String, strBody As String, dRemind As Date, Optional oDoc As Document) As String  
Dim myOlApp As Object  'Outlook.Application  
Dim olTaskItem As Object  'Outlook.TaskItem  
Dim myNameSpace As Object  'Outlook.NameSpace  
Dim myFolder As Object
Dim myExplorer As Object  'Outlook.Explorer  
Const c_TaskItem As Integer = 3
Const c_ByValue As Integer = 1
Const c_olFolderTasks As Integer = 13
Dim bcreate As Boolean
bcreate = False
On Error Resume Next
Set myOlApp = GetObject(, "Outlook.Application")
On Error GoTo 0
On Error GoTo Err_Handle
' OL bereits gestartet?  
If myOlApp Is Nothing Then
  bcreate = True
  Set myOlApp = CreateObject("Outlook.Application")
End If
Set myNameSpace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNameSpace.GetDefaultFolder(c_olFolderTasks)
Set myExplorer = myOlApp.ActiveExplorer
If TypeName(myExplorer) = "Nothing" Then
    Set myExplorer = myFolder.GetExplorer
End If
'Zeigt den Explorer mit dem Aufgabenordner an  
'myExplorer.Display  
' Neue Aufgabe  
Set olTaskItem = myOlApp.CreateItem(c_TaskItem)
' Aufgabe beschreiben  
With olTaskItem
  .Categories = strCat
  .StartDate = dStart
  .DueDate = dEnd
  ' Erinnerung gesetzt  
  If dRemind > 0 Then
    .ReminderSet = True
    .ReminderTime = dRemind
  Else
    .ReminderSet = False
  End If
  .Subject = strSub
  .Body = strBody
  .Importance = cbxPrio.ListIndex
  ' Dokument anhängen  
  If Not oDoc Is Nothing Then
    .Attachments.Add oDoc.FullName, c_ByValue
  End If
  .Save
  If Me.chkShow = True Then
    myExplorer.Display  '.Display  
  End If
  MsgBox "Die Aufgabe wurde in Outlook eingetragen", vbInformation, "Outlookaufgaben erstellen"
End With
' Aufräumen  
GoTo fkt_Exit
Err_Handle:
Dok2OLTask = Err.Description
If bcreate = True Then
'  myOlApp.Quit  
End If
fkt_Exit:
Set myOlApp = Nothing
End Function 

Die Userform kann aus der Dokumentvorlage per Symbolleistensymbol aufgerufen werden. Dazu besitzt diese eine neue Symbolleiste CHF_OLTask mit folgendem Symbol:

OLTask-Symbol

Wenn Ihr die Userform in einen eigenen Aufruf einbinden möchten, benötige Ihr folgenden Aufruf:

Sub CallDoc2OLfrm()  
frmDoc2OLTask.Show vbModeless  
End Sub 

 www.chf-online.de/vba/vbpolaufgabe2.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)