Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abgleich Outlook-Aufg mit Excel unter 2007 mgl?

Abgleich Outlook-Aufg mit Excel unter 2007 mgl?
28.05.2009 16:41:38
Jessi
Hallo zusammen,
ich habe eine Frage, funktioniert folgender Code unter Office 2007? Dieser VBA Code soll die Aufgabenliste aus Outlook in eine Excel-Tabelle schreiben und wieder zurückschreiben. Hört sich alles super an, dummerweise funnktionert es bei mir nicht. Daher die Frage, ob ggf. Office 2007 daran schuld ist und ein Befehl wieder mal nicht unterstützt wird.
LG
Jessi
Das hier in ein Modul kopieren.
- "Extras / Verweise... / Microsoft Excel x.0 Object Library" anticken
- In Outlook einen Aufgaben-Ordner anzeigen
- Prozedur "OutlookAufgabenExportieren" ausführen
Option Explicit
Option Base 1
'####################################################################################
'Artikel: http://www.wer-weiss-was.de/cgi-bin/f...
'Kristian Zarse, 27.04.2004
'####################################################################################
Dim Ueberschriften As Variant
Dim appExcel As Excel.Application
Dim wbExcel As Excel.Workbook
Dim wsExcel As Excel.Worksheet
Const ExcelDateiname As String = "Outlook-Aufgaben_2.xls" 'ggf. mit Pfad angeben, sonst wird im Standard-Excel-Ordner gespeichert
Const iDatum As Integer = 1
Const iStatus As Integer = 2
Const iWichtigkeit As Integer = 3
Const iVertraulichkeit As Integer = 4
Const xOffset As Integer = 1
Const yOffset As Integer = 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub AufgabenEigenschaftSchreiben(AufgID_ As Integer, EigID_ As Integer, Eigenschaft_ As Variant) _
Dim ue As Integer
If AufgID_ = 0 Then
For ue = 1 To UBound(Ueberschriften)
wsExcel.Cells(AufgID_ + yOffset, ue + xOffset).Value = Ueberschriften(ue)
Next ue
Else
wsExcel.Cells(AufgID_ + yOffset, EigID_ + xOffset).Value = Eigenschaft_
End If 'AufgID=0
End 

Sub 'AufgabenEigenschaftSchreiben
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _


Function EigenschaftValidieren(Eigenschaft_ As Date, Typ_ As Integer) As Variant
Select Case Typ_
Case iDatum
If (Eigenschaft_ = 949998) Then
EigenschaftValidieren = "-"
Else
EigenschaftValidieren = Eigenschaft_
End If
Case iStatus
Select Case Eigenschaft_
Case olTaskNotStarted
EigenschaftValidieren = "Nicht begonnen"
Case olTaskInProgress
EigenschaftValidieren = "In Bearbeitung"
Case olTaskComplete
EigenschaftValidieren = "Erledigt"
Case olTaskWaiting
EigenschaftValidieren = "Wartet auf jemand anderen"
Case olTaskDeferred
EigenschaftValidieren = "Zurückgestellt"
End Select 'iStatus
Case iWichtigkeit
Select Case Eigenschaft_
Case olImportanceLow
EigenschaftValidieren = "Niedrig"
Case olImportanceNormal
EigenschaftValidieren = "Normal"
Case olImportanceHigh
EigenschaftValidieren = "Hoch"
End Select 'iWichtigkeit
Case iVertraulichkeit
Select Case Eigenschaft_
Case olNormal
EigenschaftValidieren = "Normal"
Case olPersonal
EigenschaftValidieren = "Persönlich"
Case olPrivate
EigenschaftValidieren = "Privat"
Case olConfidential
EigenschaftValidieren = "Vertraulich"
End Select 'iVertraulichkeit
End Select 'Typ_
End 

Function 'DatumValidieren
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _


Sub OutlookAufgabenExportieren()
Dim a As Integer
Dim e As Variant
Dim tiAufgabe As TaskItem
Dim bExcelGeoeffnet As Boolean
Dim rExcelRange As Excel.Range
With ActiveExplorer.CurrentFolder
If (.Items.Count > 0) And (True) Then
Ueberschriften = Array( _
"Betreff", _
"Text", _
"Angelegt", _
"Modifiziert", _
"Serie", _
"Fällig am", _
"Begonnen am", _
"Status", _
"Priorität", _
"Vertraulichkeit", _
"% erledigt", _
"Erinnerung", _
"Zuständig", _
"Erledigt am", _
"Gesamtaufwand", _
"Ist-Aufwand")
On Error Resume Next
Set appExcel = CreateObject("Excel.Application") 'Excel öffnen
appExcel.Visible = True
Set wbExcel = appExcel.Workbooks.Add             'neue Arbeitsmappe anlegen
If wbExcel.Worksheets.Count > 0 Then
Set wsExcel = wbExcel.Worksheets(1)          'erste Tabelle auswählen bzw. ...
Else
Set wsExcel = wbExcel.Worksheets.Add         '... neue Tabelle anlegen
End If 'Count>0
bExcelGeoeffnet = (Err.Number = 0)
On Error GoTo 0
If bExcelGeoeffnet Then
AufgabenEigenschaftSchreiben 0, 0, 0 'Überschriften schreiben
For a = 1 To .Items.Count
On Error Resume Next
Set tiAufgabe = .Items(a)
With tiAufgabe
AufgabenEigenschaftSchreiben a, 1, .Subject 'Text
AufgabenEigenschaftSchreiben a, 2, .Body 'Text
AufgabenEigenschaftSchreiben a, 3, EigenschaftValidieren(.CreationTime, iDatum)
AufgabenEigenschaftSchreiben a, 4, EigenschaftValidieren(.LastModificationTime, iDatum)
AufgabenEigenschaftSchreiben a, 5, .IsRecurring 'Wahrheitswert
AufgabenEigenschaftSchreiben a, 6, EigenschaftValidieren(.DueDate, iDatum)
AufgabenEigenschaftSchreiben a, 7, EigenschaftValidieren(.StartDate, iDatum)
AufgabenEigenschaftSchreiben a, 8, EigenschaftValidieren(.Status, iStatus)
AufgabenEigenschaftSchreiben a, 9, EigenschaftValidieren(.Importance, iWichtigkeit)
AufgabenEigenschaftSchreiben a, 10, EigenschaftValidieren(.Sensitivity, iVertraulichkeit)
AufgabenEigenschaftSchreiben a, 11, .PercentComplete / 100 'Prozent
AufgabenEigenschaftSchreiben a, 12, EigenschaftValidieren(.ReminderTime, iDatum)
AufgabenEigenschaftSchreiben a, 13, .Owner 'Text
AufgabenEigenschaftSchreiben a, 14, EigenschaftValidieren(.DateCompleted, iDatum)
AufgabenEigenschaftSchreiben a, 15, .TotalWork 'in Minuten angegeben
AufgabenEigenschaftSchreiben a, 16, .ActualWork 'in Minuten angegeben
End With 'tiAufgabe
On Error GoTo 0
Next a
a = a - 1
Set rExcelRange = wsExcel.Range(Cells(yOffset, xOffset + 1), Cells(yOffset + a, xOffset +  _
UBound(Ueberschriften)))
With rExcelRange
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
End With 'rExcelRange
Set rExcelRange = wsExcel.Range(Cells(yOffset, xOffset + 1), Cells(yOffset, xOffset + UBound( _
Ueberschriften)))
With rExcelRange
.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
.Interior.ColorIndex = 37
.Font.Bold = True
.Columns.AutoFit 'geht so nicht
End With 'rExcelRange
Set rExcelRange = Nothing
'Excel-Datei speichern und schließen
On Error Resume Next
wbExcel.SaveAs ExcelDateiname
Application.ActiveExplorer.Activate
If Err.Number = 0 Then
MsgBox "Die Datei """ & wbExcel.FullName & """ wurde gespeichert.", vbInformation, "Erfolgreich" _
Else
MsgBox "Die Datei """ & wbExcel.FullName & """ konnte nicht gespeichert werden.", vbCritical, " _
Fehler"
End If 'Err=0
On Error GoTo 0
wbExcel.Close False
'Excel beenden
'appExcel.Quit
'Das machen wir hier nicht. Wenn Excel nämlich schon offen war,
'soll es auch offen bleiben. Falls nicht, wird es bei "Nothing"
'automatisch geschlossen (s.u.).
Else
MsgBox "Excel konnte nicht geöffnet werden!", vbCritical, "Fehler"
End If 'bExcelGeoeffnet
Else
MsgBox "Im aktuellen Outlook-Ordner liegen keine Aufgaben-Elemente vor!", vbCritical, "Fehler"
End If '.Items.Count>0
End With 'ActiveExplorer.CurrentFolder
Set wsExcel = Nothing
Set wbExcel = Nothing
Set appExcel = Nothing
End 

Sub 'OutlookAufgabenExportieren


		

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abgleich Outlook-Aufg mit Excel unter 2007 mgl?
28.05.2009 18:14:43
Luschi
Hallo Jessi,
leider kann ich z.Z. das Outlookmakro nicht mit Office 2007 testen, mache ich erst heute Abend.
Aber auch so gibt es ein paar kleine Ungenauigkeiten im Vba.Code:
Set rExcelRange = wsExcel.Range(Cells(yOffset, xOffset + 1), Cells(yOffset + a, xOffset + UBound(Ueberschriften)))
muß man ändern in:
Set rExcelRange = wsExcel.Range(wsExcel.Cells(yOffset, xOffset + 1), wsExcel.Cells(yOffset + a, xOffset + UBound(Ueberschriften)))
und dass überall, wo wsExcel.Range(Cells...) verwendet wird.
Set wsExcel = Nothing
Die Aussage, daß mit dem vorstehenden Befehl Excel geschlossen wird, falls Excel vor der Ausführung des Makros nicht geöffnet war ist falsch! Es wird nur der gesetzte Verweis auf die Objektvariable gelöscht.
Ob Excel schon offen ist testet man so:
On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If Err.Number Then
MsgBox "Excel noch nicht geöffnet"
Err.Number = 0
End If
On Error GoTo 0
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Abgleich Outlook-Aufg mit Excel unter 2007 mgl?
28.05.2009 18:48:37
Jessi
Danke für Deine Rückmeldung!
OK, verstehe allerdings nicht so richtig was Du schreibst. Es liegt aber mit Sicherheit nicht an Deiner Ausdrucksweise :-), sondern daran, dass ich keine VBA-Kenntnisse habe :-) oder FAST keine.
Danke vorab!
LG
Jessi
AW: Abgleich Outlook-Aufg mit Excel unter 2007 mgl?
29.05.2009 09:38:21
Luschi
Hallo Jessi,
habe gestern Abend das Makro mit Outlook2007 und Excel2007 getestet. Insgesamt läuft das Makro auch in dieser Konfiguration.
In diesem Makro werden Outlook- und Excel-Vba gemischt und deshalb muß man die Objekte richtig ansprechen. Deshalb passiert es, das Outlook bei dieser Anweisung:
Set rExcelRange = wsExcel.Range(Cells(yOffset, xOffset + 1), Cells(yOffset + a, xOffset + UBound(Ueberschriften))) wegen dem Objekt 'Cells' stolpern "kann"!
'Cells' ist ein Excel-Objekt, das Outlook nicht kennt.
Am Anfang des Makros steht folgende Anweisung:
wsExcel.Cells(AufgID_ + yOffset, EigID_ + xOffset).Value = Eigenschaft_
Hier ist die Zuweisung genau richtig. Im darüberstehenden Vba-Code steht 'Cells' ohne den Hinweis auf das Objekt 'wsExcel' - und deshalb hat hier Outlook ein Problem.
Das Merkwürdige daran ist, daß beim 1. Start des Makros alles i.O. ist - aber wenn man das gleich Makro nochmals startet, dann knallt es.
Über das verlängerte WE werde ich das Makro nochmals mit Outlook 2002/2003 und 2007 testen.
Bis dahin Gruß von Luschi
aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige