Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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
Mailanhänge aus Lotus Notes in Ordner ablegen
01.04.2017 21:49:59
Henner
Guten Abend Excelaner
Ich muss aus einem Postfach in Lotus Notes alle E-Mails auslesen und die Dateianhänge (*.jpg) in Ordner im Pfad "C:/images/" ablegen. Der Ordner muss aus der ersten Zahl des Betreffs der jeweiligen E-Mail bestehen.
Dazu habe ich hier einiges an Code gefunden, der macht aber natürlich nicht das was ich benötige:

https://dbwiki.net/wiki/VBA_Tipp:_E-Mails_mit_Attachments_aus_Notes_auslesen
Hier noch einige Anforderungen:
- Der Betreff jeder E-Mail hat das Format 12345678 (123456). Der Ordner, in dem die Fotos aus dieser E-Mail abgelegt werden sollen, muss in diesem Fall "12345678" heissen (Kann auch das Zeichen "-" enthalten).
- Es gibt E-Mails ohne Fotos und E-Mails mit mehreren Fotos. Es kann auch mehrere E-Mails mit dem gleichen Betreff und/oder der gleichen Zahl am Anfang geben. Somit kann es vorkommen, dass der zu erstellende Ordner bereits existiert.
- Die Fotos sollen unter dem Namen im jeweiligen Ordner gepseichert werden, den sie auch in der E-Mail haben (z.B.: "IMG_2319.jpg").
Ich habe den Code mal in eine Excel Datei kopiert und "Mailfile" und "Server" hinzugefügt sowie einige Korrekturen vorgenommen.
Vielen vielen Dank im Voraus, schönen Abend & Gruss
Henner

https://www.herber.de/bbs/user/112555.xlsm _
a>

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
03.04.2017 10:44:42
mumpel
Hallo!
Frag mal im Notes-Forum nach. Das Notes Forum
Gruß, René
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
03.04.2017 14:41:24
Henner
Hallo René,
danke für Deine Antwort. Da der Code die grundsätzlichen Funktionen wie Auslesen einer Notes Datenbank und Extrahieren von Dateianhängen bereits mitbringt, hatte ich die Hoffnung dass ein versierter VBAler die entsprechenenden Änderungen vornehmen könnte.
Ich warte nochmal ob jemand eine Lösung liefern kann und würde mich ansonsten an das genannte Forum wenden und den Thread verlinken.
Gruss Henner
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
03.04.2017 17:08:20
Sven
Hi, so funktioniert es...
Du musst halt noch Server und Mailfile hinterlegen. Diese Angaben findest Du in Notes unter
DATEI -> ANWENDUNGEN -> EINSTELLUNGEN

Const myServer As String = "HIER SERVER EINTRAGEN"
Const myMailfile As String = "HIER MAILFILE EINTRAGEN"
Public Function NotesEMailsAnzeigen() As Integer
On Error GoTo ErrBeh
Dim intErgebnis As Integer
Dim objNotes As Object
Dim LNdb As Object
Dim LNView As Object
Dim LNDoc As Object
Dim LNItem As Object
Dim strSubject As String
Dim LNWorkspace As Object
Dim LNAttachment As Variant
intErgebnis = 0
Set objNotes = GetObject("", "Notes.NotesSession")
Set LNdb = objNotes.GETDATABASE(myServer, myMailfile)
Set LNWorkspace = CreateObject("notes.notesuiworkspace")
LNWorkspace.OpenDatabase myServer, myMailfile
If Not (LNdb Is Nothing) Then
Set LNView = LNdb.GETVIEW("$Inbox")
If Not (LNView Is Nothing) Then
Call LNView.Refresh
Set LNDoc = LNView.GETFIRSTDOCUMENT
Do While Not LNDoc Is Nothing
Set LNItem = LNDoc.GETFIRSTITEM("Subject")
Debug.Print LNItem.Text
Select Case MsgBox("Soll die Mail mit dem Subject: " + vbNewLine + vbNewLine +  _
LNItem.Text + vbNewLine + " angezeigt werden?", vbYesNo)
Case vbYes
LNWorkspace.EDITDOCUMENT True, LNDoc, False, "", True, True
End Select
Set LNItem = LNDoc.GETFIRSTITEM("Body")
Debug.Print LNItem.Text
If LNDoc.HasEmbedded Then
Debug.Print vbNewLine + "Attached Files:"
For Each LNAttachment In LNItem.EmbeddedObjects
Debug.Print LNAttachment.Name
Select Case MsgBox("Attachment: " & _
LNAttachment.Name & _
" nach C:\ extrahieren?", vbYesNo)
Case vbYes
LNAttachment.ExtractFile ("C:\" + LNAttachment.Name)
End Select
Next
Debug.Print vbNewLine
End If
Set LNDoc = LNView.GETNEXTDOCUMENT(LNDoc)
Loop
End If
End If
GoTo Ende
ErrBeh:
Err.Clear
intErgebnis = 1
Ende:
Set objNotes = Nothing
Set LNdb = Nothing
Set LNView = Nothing
Set LNItem = Nothing
Set LNWorkspace = Nothing
Set LNDoc = Nothing
NotesEMailsAnzeigen = intErgebnis
End Function

Anzeige
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
03.04.2017 17:52:34
Henner
Hallo Sven
Vielen Dank für Deine Antwort. Das sieht soweit schonmal sehr gut aus. Ich habe die msgBox Abfragen auskommentiert und den Code durchlaufen lassen. Die Fotos werden jetzt exportiert und abgelegt.
Allerdings funktionieren 2 Sachen noch nicht:
- Die Fotos werden nicht in einen Unterordner gespeichert, der als Namen den 1. Teil des E-Mail Betreffs tragen soll, sondern alle in einen Ordner gespeichert.
- Der Code hört nach 253 Fotos resp. 89 E-Mails auf zu arbeiten. Würde es helfen jede Mail nach dem Auslesen wieder zu schliessen? Wenn ja, wie ginge das? Oder woran könnte es sonst liegen?
Vielen Vielen Dank für Deine Hilfe und Gruss
Anzeige
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
04.04.2017 15:58:07
Sven
Hi, kommt nach der ersten Zahl bei Dir immer ein "Blank"? Ansonsten schau ich nochmal über den Code, bzgl. dem 2. Punkt von Dir...
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
04.04.2017 16:33:50
Sven
So, habe nochmals etwas angepasst...
Unter

Const savePath As String = "D:\"
musst Du noch den Pfad setzen, wo die Dateien gespeichert werden sollen. Die Unterordner (z.B. 12345678) werden automatisch generiert und das Attachment darin abgelegt.

Const myServer As String = "LNT04110/SRV/DACH041/DACHSER/DE"
Const myMailfile As String = "mail\ssoellne.nsf"
Const savePath As String = "D:\"
Public Function NotesEMailsAnzeigen() As Integer
On Error GoTo ErrBeh
Dim filePath As String
Dim intErgebnis As Integer
Dim objNotes As Object
Dim LNdb As Object
Dim LNView As Object
Dim LNDoc As Object
Dim LNItem As Object
Dim strSubject As String
Dim LNWorkspace As Object
Dim LNAttachment As Variant
intErgebnis = 0
Set objNotes = GetObject("", "Notes.NotesSession")
Set LNdb = objNotes.GETDATABASE(myServer, myMailfile)
Set LNWorkspace = CreateObject("notes.notesuiworkspace")
LNWorkspace.OpenDatabase myServer, myMailfile
If Not (LNdb Is Nothing) Then
Set LNView = LNdb.GETVIEW("$Inbox")
If Not (LNView Is Nothing) Then
Call LNView.Refresh
Set LNDoc = LNView.GETFIRSTDOCUMENT
Do While Not LNDoc Is Nothing
Set LNItem = LNDoc.GETFIRSTITEM("Subject")
On Error Resume Next
filePath = Trim(Left(LNItem.Text, InStr(1, LNItem.Text, " ", vbTextCompare)) _
)
Debug.Print filePath
MkDir savePath
MkDir savePath & "\" & filePath
On Error GoTo 0
Debug.Print LNItem.Text
Set LNItem = LNDoc.GETFIRSTITEM("Body")
If LNDoc.HasEmbedded Then
For Each LNAttachment In LNItem.EmbeddedObjects
Debug.Print LNAttachment.Name
LNAttachment.ExtractFile (savePath + "\" + filePath + "\" +  _
LNAttachment.Name)
Next
End If
Set LNDoc = LNView.GETNEXTDOCUMENT(LNDoc)
Loop
End If
End If
GoTo Ende
ErrBeh:
Err.Clear
intErgebnis = 1
Ende:
Set objNotes = Nothing
Set LNdb = Nothing
Set LNView = Nothing
Set LNItem = Nothing
Set LNWorkspace = Nothing
Set LNDoc = Nothing
NotesEMailsAnzeigen = intErgebnis
End Function

Anzeige
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
04.04.2017 20:13:38
Henner
Hallo Sven,
tausend Dank für Dein Engagement - der Code funktioniert super!
- Würdest Du mir noch sagen wie ich die Anzahl der E-Mails in dem Postfach ermitteln kann? Da der ganze Prozess relativ lange dauert würde ich gerne eine progress bar einbauen. Das Einbauen der Anzeige ist für mich kein Problem, ich muss nur wissen wie ich die Anzahl der auszulesenden Dokumente ermitteln kann.
- Wäre es noch möglich dass nur alle Fotos abgelegt werden die "Q3" oder "Q4" in ihrem Dateinamen haben?
Nochmal: Vielen vielen Dank! Gruss Henner
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
04.04.2017 20:35:47
Henner
Ich nochmal...
Ich habe den Code jetzt soweit umbauen können, dass nur Fotos abgelegt werden die in ihrem Dateinamen "Q3" oder "Q4" enthalten und auch nur ein Ordner angelegt wird wenn auch Fotos abgelegt werden. Die UserForm mit dem Counter ist auch schon drin, da fehlt mir allerdings jetzt noch der Zielwert (Gesamt Anzahl E-Mails im Postfach).
Wäre super wenn Du mir die Zeile noch verraten würdest. DANKE! Gruss Henner

Public Function NotesEMailsAnzeigen() As Integer
On Error GoTo ErrBeh
Dim filePath As String
Dim intErgebnis As Integer
Dim objNotes As Object
Dim LNdb As Object
Dim LNView As Object
Dim LNDoc As Object
Dim LNItem As Object
Dim strSubject As String
Dim LNWorkspace As Object
Dim LNAttachment As Variant
Dim savePath As String
Dim myMailfile As String
Dim myServer As String
savePath = ThisWorkbook.Path & "\img2\"
myServer = "CHSDBNN12/SCH"
myMailfile = "MAIL/SCH/mailin/quickche.nsf"
intErgebnis = 0
Set objNotes = GetObject("", "Notes.NotesSession")
Set LNdb = objNotes.GETDATABASE(myServer, myMailfile)
Set LNWorkspace = CreateObject("notes.notesuiworkspace")
LNWorkspace.OpenDatabase myServer, myMailfile
UserForm1.Show vbModeless
UserForm1.Label1.Caption = 1
If Not (LNdb Is Nothing) Then
Set LNView = LNdb.GETVIEW("$Inbox")
If Not (LNView Is Nothing) Then
Call LNView.Refresh
Set LNDoc = LNView.GETFIRSTDOCUMENT
Do While Not LNDoc Is Nothing
Set LNItem = LNDoc.GETFIRSTITEM("Subject")
On Error GoTo 0
Debug.Print LNItem.Text
Set LNItem = LNDoc.GETFIRSTITEM("Body")
If LNDoc.HasEmbedded Then
For Each LNAttachment In LNItem.EmbeddedObjects
Debug.Print LNAttachment.Name
If InStr(LNAttachment.Name, "Q3") > 0 = True Or InStr(LNAttachment.Name, _
"Q4") > 0 = True Then
Set LNItem = LNDoc.GETFIRSTITEM("Subject")
On Error Resume Next
filePath = Trim(Left(LNItem.Text, InStr(1, LNItem.Text, " ",  _
vbTextCompare)))
Debug.Print filePath
MkDir savePath
MkDir savePath & "\" & filePath
LNAttachment.ExtractFile (savePath & "\" & filePath + "\" &  _
LNAttachment.Name)
End If
UserForm1.Label1.Caption = UserForm1.Label1.Caption + 1
DoEvents
Next
End If
Set LNDoc = LNView.GETNEXTDOCUMENT(LNDoc)
Loop
End If
End If
Unload UserForm1
GoTo Ende
ErrBeh:
Err.Clear
intErgebnis = 1
Ende:
Set objNotes = Nothing
Set LNdb = Nothing
Set LNView = Nothing
Set LNItem = Nothing
Set LNWorkspace = Nothing
Set LNDoc = Nothing
NotesEMailsAnzeigen = intErgebnis
End Function

Anzeige
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
04.04.2017 21:08:51
Henner
Sorry, noch eine Frage.
Wie kann ich diese Function aus einer Sub heraus aufrufen? Danke und Gruss
AW: Mailanhänge aus Lotus Notes in Ordner ablegen
05.04.2017 08:45:37
Sven
Hi,
so ermittelst Du die Anzahl der Mails...

Dim cntMails as Long
cntMails = LNView.allentries.Count
Diese Code am besten unter die Zeile
Set LNView = LNdb.GETVIEW("$Inbox")
Die Function rufst Du ganz simple über die Sub wie folgt auf:
public sub test()
NotesEMailsAnzeigen
end sub

(ERL&RM) AW: Mailanhänge aus Lotus Notes in Ordner
06.04.2017 09:32:47
Henner
Hi Sven,
funktioniert jetzt perfekt.
Beim Aufrufen der Function hatte ich übrigens noch n ganz anderen Fehler drin - daher erledigt.
Wenn Du wüsstest wie viel Handarbeit Du mir erspart hast... DANKE!
Schönen Tag und Gruss
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige