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
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 --
"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?
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.
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
> 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.
"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
> 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").
"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
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
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