VBA; Programmierung
mit Outlook - Projektverwaltung
|
Eine kleine Projektverwaltung
Download
Funktion:
- Jedes Element in Outlook
kann einem Projekt zugeordnet werden.
- Der Zeitaufwand von
Aufgaben kann zusammenaddiert werden.
- Über QSeachFolders
können alle Elemente eines Projektes in einem Ordner
dargestellt werden.
Elemente, welche zu einem Projekt gehören, werden in
der Übersicht ausgewählt, danach erfolgt ein Klick auf die
Schaltfläche "Projekt" und die Auswahl eines Projektes.
Wenn der Suchordner eingerichtet wurde, stehen die Elemente
zusätzlich im Suchordner.
Wenn es sich um Aufgaben handelt, können alle zu einem
Projekt gehörigen Zeiten zusammengezählt werden.
Installation:
- Sie benötigen das Control
Microsoft List View Component 5.0. Vor dem Import ein
Formular öffnen, dort die Toolbox, dann Rechtsklick
und Microsoft List View Control 5.0 hinzufügen.
- Sie benötigen Microsoft
Collobration Objects (CDO). Im CodeEditor F2, dann Referenzen,
dann Microsoft Colloboration Data Objects auswählen.
- Extrahieren Sie die
folgenden Dateien und importieren jede einzelne in den
VB-Editor
- Wählen Sie in Outlook
Extras/Anpassen und fügen die beiden Macros Project
und ProjektTimes einer Toolbar hinzu.
- Richten Sie einen Suchordner
mit folgender Query ein: UserField(Projekt) = "Projektname"
- Richten Sie Formulare
mit Zusatzfeldern ein, z.B. IPM.Task.Projekt, falls
dort weitere Daten pro Projekt gespeichert werden sollen,
ansonsten nimmt Outlook immer das Standardformular
- Optional kann ein Ordner
"Projekte" angelegt werden (Typ beliebig) und ein Formular
für Projekte erstellt werden, welches für jedes Projekt
bestimmte Felder festhält. Die Projektverwaltung liest
alle Elemente aus diesem Ordner aus und stellt diese
in der Projektauswahl zur Verfügung.
- Das Macro zum Zuordnen
von Projekten heißt Projekt.SetProject
- Das Macro zum Ermitteln
der Zeiten heißt Projekt.CalcTask
- In Outlook: Extras/Anpassen,
eine Toolbar erzeugen und die Macros dort hineinschieben,
eventuell mit Icons verschönern.
Die Komponente ListView hinzufügen (Rechtsklick in der
Toolbox)
Die Bibliothek CDO 1.2 hinzufügen (F2 im Code-Editor)
Funktionsweise
- Objekte, welche zu
einem Projekt gehören erhalten ein benutzerdefiniertes
Feld, welches den Namen des Projektes angibt
- Die Nachrichtenklasse
wird um ".Projekt" erweitert, dadurch können eigene
Formulare angezeigt werden, zum Beispiel um den Projektnamen
anzuzeigen.
- Anhand dieses Feldes
können Zeiten in Aufgaben zusammenaddiert werden.
- Mit Hilfe von QSearchFolders
können alle Elemente, welche zu einem Projekt gehören,
zusammengetragen werden
- Das Projekt kann in
der Übersicht sowie im Formular angezeigt werden.
Bedienung
- Um Elemente zu einem Projekt zuzuordnen, drücken
Sie auf den Knopf "Projekt" und wählen das Projekt aus
- Um den Aufwand für ein Projekt anzusehen, klicken
Sie auf Zeiten Ausrechnen
Projektzuordnung und Ausrechnen der Zeiten
Ein Suchordner sucht alle Elemente eines Projekts.
Der Suchordner kann mit QSearchFolders eingerichtet werden
oder manuell über die Extended MAPI-Funktion SetSearchCriteria
erstellt werden. SetSearchKriteria ist nicht in CDO oder
Outlook-API enthalten und kann daher nicht per Script bedient
werden.
Suchordner können auch per QSearchFolders hergestellt
werden:
Einrichtung des Suchordners für Projekt 1
Funktion
Das Hauptprogramm arbeitet nach meinem Lieblingstyp:
Irgendwas mit einer Auswahl machen. In diesem Fall die Nachrichtenklasse
ändern und das Feld Projekt füllen. Vorher wird noch der
Dialog zur Auswahl aufgerufen.
shared m_prj As String
shared projekte As New CProjekte
' Projekt auswählen und allen Elementen
im Feld Projekt zuweisen
' Gleichzeitig wird die Message-Class geändert, es wird
.Projekt angehägt, also aus ipm.task wird ipm.task.projekt
' Dies erlaubt das Erstellen eigener Formulare mit Projektvewaltung
' wenn es diese nicht gibt nimmt Outlook einfach das Standardformular
shared Sub SetProjekt()
Dim form As New FormProjekt
Dim obj As Object
Dim userprop As UserProperty
Dim m As MailItem
form.Show 1
For Each obj In Application.ActiveExplorer.Selection
If obj.UserProperties.Find("Projekt") Is Nothing
Then
obj.UserProperties.Add "Projekt", olText, True
End If
obj.UserProperties.Find("Projekt").Value = m_prj
If InStr(obj.MessageClass, ".Projekt") = 0 Then
obj.MessageClass = obj.MessageClass & ".Projekt"
End If
obj.Save
Next obj
Unload form
End Sub
' Aufruf des Formulars welches die
Zeiten zusammenaddiert
shared Sub CalcTask()
Dim form As New FormProjektZeiten
Set form.folder = Application.ActiveExplorer.CurrentFolder
If form.folder.DefaultItemType = olTaskItem Then
form.Init
form.Show 1
Else
MsgBox "Bitte Aufgabenordner auswählen"
End If
Unload form
End Sub
Einstellungen speichern
Das Speichern der Einstellungen ist ein wenig Tricky,
da wir die Einstellungen im Posteingang in einer verstecken
Nachricht speichern wollen, dies kann Outlook nicht, deswegen
wechseln wir zu CDO
|
shared m_projekte As New Collection ' Additional
projects
shared m_folderProjekte As folder ' Projekt folder
' Wir fassen alles in m_projekte und alle Elemente im Ordner
zusammen und liefern eine Liste zurück
shared Function GetProjects() As Collection
Dim c As New Collection
Dim s As String
Dim i As Integer
Dim obj As Object
For i = 1 To m_projekte.Count
s = m_projekte.Item(i)
c.Add s
Next i
If Not (m_folderProjekte Is Nothing) Then
For Each obj In m_folderProjekte.Items
c.Add obj.Subject
Next
End If
Set GetProjects = c
End Function
' öffnen der Konfigurationsnachricht
im Posteingang oder erstellen einer neuen
shared Function ConfigMsg() As MAPI.Message
Dim msg As MAPI.Message
Dim inbox As MAPI.folder
Dim msgs As MAPI.Messages
Dim session As New MAPI.session
' Direkte
Übergabe der MAPI-Session an CDO:
Set session.MAPIOBJECT = Application.GetNamespace("MAPI").MAPIOBJECT
Set inbox = session.GetDefaultFolder(CdoDefaultFolderInbox)
Set msgs = inbox.HiddenMessages
For Each msg In msgs
If msg.Subject = "Projects" Then
Set ConfigMsg
= msg
Exit For
End If
Next msg
If ConfigMsg Is Nothing Then
Set msg = msgs.Add("Projects")
msg.fields(CdoPR_MESSAGE_CLASS).Value
= "IPM.Project"
Set ConfigMsg = msg
End If
End Function
' Abspeichern der
Daten. Wir fassen die Projektnamen zusammen und speichern
die ID des Projektordners
shared Sub Save()
Dim fields As MAPI.fields
Dim field As MAPI.field
Dim config As MAPI.Message
Dim s As String
Dim i As Integer
Dim line As String
For i = 1 To m_projekte.Count
line = m_projekte.Item(i)
s = s + line + vbCr
Next i
Set config = ConfigMsg
If Not m_folderProjekte Is Nothing Then
Set fields = config.fields
Set field = Nothing
On Error Resume Next
Set field = fields.Item("projectfolder")
On Error GoTo 0
If field Is Nothing Then Set field = fields.Add("projectfolder",
CdoString)
field.Value = m_folderProjekte.EntryID
End If
config.text = s
config.Update
End Sub
' Beim Laden andersherum
shared Sub Load()
Dim config As MAPI.Message
Dim text As String
Dim s As String
Set config = ConfigMsg
If Not (config Is Nothing) Then
text = config.text
Do
p = InStr(1, text, vbCr)
If p = 0 Then
m_projekte.Add text
Exit Do
Else
s = Left(text, p - 1)
text = Mid(text, p + 1)
End If
m_projekte.Add s
Loop
On Error Resume Next
Set field = Nothing
Set fields = config.fields
Set field = fields.Item("projectfolder")
On Error GoTo 0
If Not (field Is Nothing) Then
On Error Resume Next
id = field.Value
Set m_folderProjekte = Application.GetNamespace("MAPI").GetFolderFromID(id)
On Error GoTo 0
End If
End If
End Sub
shared Sub Init()
If m_projekte.Count = 0 Then Load
End Sub
Private Sub Class_Initialize()
Set m_folderProjekte = Nothing
Load
End Sub
|