Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ordner Posteingang überwachen

2,961 views
Skip to first unread message

Andreas.Fischer

unread,
Oct 9, 2006, 6:48:02 AM10/9/06
to
Hallo,

Ich möchte per VBA den Posteingang von zusätzlichen Postfächern überwachen.
Da die Anzahl dieser zusätlichen Postfächer aber nicht feststeht, steh ich
vor dem Problem. Mit einem zusälichen Postfach ist das kein Problem, aber mit
mehren klappt es irgendwie nicht. Kann mir wer einen Tipp geben, wie ich das
realisieren kann oder gibt es dafür keine Lösungsmöglichkeit?

Gruß Andreas

Michael Bauer [MVP - Outlook]

unread,
Oct 10, 2006, 8:59:03 AM10/10/06
to

Andreas, das geht durch Verwenden eines weiteren Klassenmoduls. Grob:

<Klasse>
Public WithEvents Items as Outlook.Items
...
</Klasse>

<DieseOutlookSitzung>
Private m_col as VBA.Collection

Private Application_Startup()
Dim obj as Klasse
Set m_col=new VBA.Collection

' 1. Ordner
Set obj=new Klasse
Set Klasse.Items=Application.Session.GetdefaultFolder(olFolderInbox).Items
m_col.Add obj

End Sub
</DieseOutlookSitzung>

--
Viele Gruesse / Best regards
Michael Bauer - MVP Outlook
-- www.VBOffice.net --

Andreas.Fischer

unread,
Oct 13, 2006, 2:40:02 AM10/13/06
to

"Michael Bauer [MVP - Outlook]" wrote:

> Am Mon, 9 Oct 2006 03:48:02 -0700 schrieb Andreas.Fischer:
> Andreas, das geht durch Verwenden eines weiteren Klassenmoduls. Grob:
>
> <Klasse>
> Public WithEvents Items as Outlook.Items

> ....


> </Klasse>
>
> <DieseOutlookSitzung>
> Private m_col as VBA.Collection
>
> Private Application_Startup()
> Dim obj as Klasse
> Set m_col=new VBA.Collection
>
> ' 1. Ordner
> Set obj=new Klasse
> Set Klasse.Items=Application.Session.GetdefaultFolder(olFolderInbox).Items
> m_col.Add obj
>
> End Sub
> </DieseOutlookSitzung>
>
> --
> Viele Gruesse / Best regards
> Michael Bauer - MVP Outlook
> -- www.VBOffice.net --
>

Hallo Michael,

Umgebung: Outlook2003, Exchange2003

Danke für deine Antwort.
Das Makro funktioniert auf meinem Postfach.
Aber wie kann ich auch andere Postfächer, die ich zusätzlich eingebunden
habe, auf Posteingang überwachen?
Das Problem ist, das die Anzahl der zusätzlichen Postfächer nicht feststeht,
also variabel sein muss.
Hast du noch einen Tip für mich?

Gruß Andreas

PS: Schaust du eigentlich noch bei Office-Loesungen worbei?

Michael Bauer [MVP - Outlook]

unread,
Oct 13, 2006, 3:51:51 AM10/13/06
to

Hallo Andreas,

genau für den Fall, variable Anzahl an Objekten, nutzt Du gezeigte Gerüst.
Du kannst soviele Objekte mit Set obj=new Klasse erzeugen, wie Du brauchst.
Das Ereignis (ItemsAdd) wird dann in dem Klassenmodul (hier: Klasse.cls, Du
kannst aber natürlich auch einen passenderen Namen verwenden) empfangen. Es
gibt die Datei zwar nur einmal, aber daraus erzeugst Du eben beliebig viele
Instanzen.

Weißt Du, wie Du die Ordner der anderen Postfächer bekommst?

Bei Office-Loesungen bin ich derzeit nicht.

Andreas.Fischer

unread,
Oct 13, 2006, 6:20:02 AM10/13/06
to

Hallo Michael,

Ich nutze zur Zeit folgendes Makro zum Auslesen der Postfächernamen:

Sub PFName()

Dim User
Dim oFld As MAPIFolder
Dim oFolders As Folders
Dim myNameSpace As Outlook.NameSpace

Set myNameSpace = Application.GetNamespace("MAPI")
Set oFolders = myNameSpace.Folders

'User setzen auf angemeldeten User
User = "\\Postfach - " & myNameSpace.CurrentUser

' Alle Ordner in oFolders durchlaufen
For Each oFld In oFolders

If Not Left(oFld.FolderPath, 13) = "\\Postfach - " Then GoTo weiter
If oFld.FolderPath = User Then GoTo weiter
Postfach = oFld

weiter:
Next

End Sub

Geht das so oder muss ich was ändern?
Wie übergebe ich den Postfachnamen dann am besten?
Muss das Makro bei jeder

Michael Bauer [MVP - Outlook]

unread,
Oct 14, 2006, 2:34:59 AM10/14/06
to
Am Fri, 13 Oct 2006 03:20:02 -0700 schrieb Andreas.Fischer:

> Hallo Michael,
>
> Ich nutze zur Zeit folgendes Makro zum Auslesen der Postfächernamen:
>
> Sub PFName()
>
> Dim User
> Dim oFld As MAPIFolder
> Dim oFolders As Folders
> Dim myNameSpace As Outlook.NameSpace
>
> Set myNameSpace = Application.GetNamespace("MAPI")
> Set oFolders = myNameSpace.Folders
>
> 'User setzen auf angemeldeten User
> User = "\\Postfach - " & myNameSpace.CurrentUser
>
> ' Alle Ordner in oFolders durchlaufen
> For Each oFld In oFolders
>
> If Not Left(oFld.FolderPath, 13) = "\\Postfach - " Then GoTo weiter
> If oFld.FolderPath = User Then GoTo weiter
> Postfach = oFld
>
> weiter:
> Next

> Postfach = oFld

Das geht so nicht, weil oFld ein Objekt ist. Es müßte also heißen:
Set Postfach=oFld

wobei Postfach dann auch als MapiFolder deklariert werden sollte. Von da aus
hangelst Du Dich weiter durch die Ordnerstruktur, bis Du den Posteingang des
Postfachs hast. Für diesen erstellt Du dann ein weiteres "Klasse"-Objekt und
fügst das in die Collection ein.

Andreas.Fischer

unread,
Oct 16, 2006, 6:28:02 AM10/16/06
to

"Michael Bauer [MVP - Outlook]" wrote:

> Das geht so nicht, weil oFld ein Objekt ist. Es müßte also heißen:
> Set Postfach=oFld
>
> wobei Postfach dann auch als MapiFolder deklariert werden sollte. Von da aus
> hangelst Du Dich weiter durch die Ordnerstruktur, bis Du den Posteingang des
> Postfachs hast. Für diesen erstellt Du dann ein weiteres "Klasse"-Objekt und
> fügst das in die Collection ein.
>
> --
> Viele Gruesse / Best regards
> Michael Bauer - MVP Outlook
> -- www.VBOffice.net --
>

Hallo Michael,

Ich habe das Makro mal umgeschrieben:

Private m_col As VBA.Collection

Private Sub Application_Startup()
Dim obj As Klasse1
Dim Postfach As MAPIFolder


Dim User
Dim oFld As MAPIFolder
Dim oFolders As Folders
Dim myNameSpace As Outlook.NameSpace

Set m_col = New VBA.Collection


Set myNameSpace = Application.GetNamespace("MAPI")
Set oFolders = myNameSpace.Folders


'User setzen auf angemeldeten User
User = "\\Postfach - " & myNameSpace.CurrentUser

For Each oFld In oFolders

If Not Left(oFld.FolderPath, 13) = "\\Postfach - " Then GoTo weiter
If oFld.FolderPath = User Then GoTo weiter

Set obj = New Klasse1
Set obj.Items =
Application.GetNamespace("MAPI").Folders.Item(oFld).Folders.Item("Posteingang").Items
m_col.Add obj
weiter:
Next

End Sub

Bei Set obj.Items ... kommt aber eine Fehlermeldung "Typen unverträglich".
Wo liegt hier mein Fehler? Oder geht es nicht so?

Gruß Andreas

Michael Bauer [MVP - Outlook]

unread,
Oct 16, 2006, 11:59:55 AM10/16/06
to
Am Mon, 16 Oct 2006 03:28:02 -0700 schrieb Andreas.Fischer:
> Set obj.Items =
> Application.GetNamespace("MAPI").Folders.Item(oFld).Folders.Item("Posteingang").Items

> Bei Set obj.Items ... kommt aber eine Fehlermeldung "Typen unverträglich".

> Wo liegt hier mein Fehler? Oder geht es nicht so?

Ist zwar die gleiche Zeile, aber der Fehler tritt bei Folders.Item(oFld)
auf. Der Item-Funktion müßtest Du einen Index (Ziffer) oder Namen (String)
übergeben. Das ist hier aber gar nciht nötig, weil Du mit oFld den Ordner ja
bereits hast. Es sollte also reichen:

Set obj.Items=oFld.Folders("Posteingang").Items

(vorausgesetzt, der Ordner "oFld" hat einen Unterordner namens
"Posteingang").

Andreas.Fischer

unread,
Oct 19, 2006, 2:06:01 AM10/19/06
to

"Michael Bauer [MVP - Outlook]" wrote:

> Ist zwar die gleiche Zeile, aber der Fehler tritt bei Folders.Item(oFld)
> auf. Der Item-Funktion müßtest Du einen Index (Ziffer) oder Namen (String)
> übergeben. Das ist hier aber gar nciht nötig, weil Du mit oFld den Ordner ja
> bereits hast. Es sollte also reichen:
>
> Set obj.Items=oFld.Folders("Posteingang").Items
>
> (vorausgesetzt, der Ordner "oFld" hat einen Unterordner namens
> "Posteingang").
>
> --
> Viele Gruesse / Best regards
> Michael Bauer - MVP Outlook
> -- www.VBOffice.net --
>

Hallo Michael,

Danke für deine Hilfe. Das ganze funktioniert jetzt Perfekt.
Aber noch eine kurz Frage: Kann ich die Existenz des Ordners "Posteingang"
in einem Einzeiler überprüfen?

Gruß Andreas

Michael Bauer [MVP - Outlook]

unread,
Oct 20, 2006, 7:52:49 AM10/20/06
to

Sorry Andreas, hatte wenig Zeit. Der Einzeiler sähe so aus:

If Not oFld.Folders("Posteingang") is Nothing then
' vorhanden
Endif

--
Viele Gruesse / Best regards
Michael Bauer - MVP Outlook

MS Outlook Kategorien organiseren, drucken, exportieren u.v.m.
Jetzt zum Einführungspreis: www.vboffice.net/product.html

Andreas.Fischer

unread,
Oct 24, 2006, 8:15:02 AM10/24/06
to

Hallo Michael,

Danke für den Einzeiler. Klappt super.
Das mit der Zeit kann ich verstehen. Mir geht es zur Zeit genauso.
Also Danke für deine Hilfe, trotz der Zeitnot.

Bis demnächst Andreas

0 new messages