PDA

Vollständige Version anzeigen : E-Mail auf Firmenname durchsuchen


Harmogy
27.09.2017, 08:52
Guten Morgen alle zusammen,

Ich bin zum ersten mal hier weil ich einfach nicht mehr weiter weis...
Mein anliegen ist folgendes. Ich habe als Bachlor-Arbeit das Thema Papierloses Büro. Anfangen wollte ich mit der Elektronischen Rechnungsspeicherung über Outlook. Ich habe bereits folgenden Code :

--------------------------------------------------------------------------
Public Sub Save_Attach_To_Disk(itm As Outlook.MailItem)


' wirkt nur auf Mails mit Anhang
If (itm.Attachments.Count >= 1) Then

Dim objAtt As Outlook.Attachment

' Datumsformat festsetzten
Dim dateFormat_target_folder
dateFormat_target_folder = Format(itm.ReceivedTime, "yyyy-mm-dd")

Dim Root_Folder As String
Root_Folder = "X:Elektronische RechnungenEingangsrechnungen"

'erstellt unterordner mit Sendername
Dim saveFolder_Root2 As String
strSenderName = itm.SenderName

sreplace = "_"


For Each mychar In Array("/", "", "^", "*", "%", "$", "#", "@", "~", "`", "{", "}", "[", "]", "|", ";", ":", ",", ".", "'", "+", "=", "?", "!", " ", Chr(34), "<", ">", "¦")
strSenderName = Replace(strSenderName, mychar, sreplace)
Next mychar

saveFolder_Root2 = Root_Folder & "" & strSenderName

Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
' checkt ob ein Ordner bereits besteht, sonst wird einer erstellt
If Not objFSO.FolderExists(saveFolder_Root2) Then
objFSO.CreateFolder (saveFolder_Root2)

End If

''''''''''''''''''''''
'erstellt unterordner mit Name und Datum
Dim saveFolder_bySender_date As String
strSubject = itm.Subject

sreplace2 = "_"

For Each mychar2 In Array("/", "", "^", "*", "%", "$", "#", "@", "~", "`", "{", "}", "[", "]", "|", ";", ":", ",", ".", "'", "+", "=", "?", "!", " ", Chr(34), "<", ">", "¦")
strSubject = Replace(strSubject, mychar2, sreplace2)
Next mychar2

saveFolder_bySender_date = saveFolder_Root2 & "" & dateFormat_target_folder & "-" & strSubject 'für Betreff dem Ordnernamen hinzu

If Not objFSO.FolderExists(saveFolder_bySender_date) Then
objFSO.CreateFolder (saveFolder_bySender_date)
End If

''''''''''''''''''''''
' speichert jeden anhang der E-Mail
Dim i As Integer
i = 0
For Each objAtt In itm.Attachments
i = i + 1
objAtt.SaveAsFile saveFolder_bySender_date & "" & "(" & i & ")-" & objAtt.DisplayName
' clear object after saving each one
Set objAtt = Nothing
Next 'go to next attachment

' speichert ebenso den E-Mail Text im gleichen Ordner
itm.SaveAs saveFolder_bySender_date & "" & "email.txt", olTXT
'fertig
End If

End Sub

----------------------------------------------------------
Es funktioniert soweit, das es mir die Mailanhänge mit der entsprechenden Mail bereits in einem Ordner speichert. Da das ganze jedoch noch recht unübersichtlich ist, würde ich gerne den Code erweitern. Dazu muss ich sagen, dass ich einfach nicht der beste in vba bin ...... .
Kann mir jemand helfen, das der Entsprechende Mail Text auf Begriffe durchsucht wird (Lieferanten namen) ?
Würde mich für jeden Vorschlag freuen :p

Mit freundlichen Grüßen

Kai

markusxy
27.09.2017, 09:03
Schau mal im Objektkatalog - Klasse VBA - Strings, da findest du alle String Methoden von VBA. Regex wären da wohl eher übertrieben.

Grundsätzlich sucht man mit Instr innerhalb eines anderen Textes. Da findest du im Objektkatalog drei Versionen und in der Hilfe jeweils mehrere Beispiele dazu.

Wenn du nicht weiterkommst, dann poste deinen Versuch (Du willst ja hoffentlich was lernen).
Wenn du außerdem Code postest, dann verwende Code Tags (Button "Code einfügen"), damit man den Code besser lesen kann.
LG Markus

Harmogy
27.09.2017, 09:10
Alles Klar :) Danke dir

Harmogy
28.09.2017, 09:20
Guten Morgen miteinander,

ich bin nun soweit, dass ich den Ordner nach der Domäne bennene mit :

domäne = Environ("userdomain")

strSenderName = domäne

nun habe ich noch folgendes Problem.

Bis jetzt funktioniert es ganz gut, jedoch wenn mehrere Rechnungen eines Lieferanten am Tag kommen, werden sie alle in den gleichen Ordner Verschoben. Die pdf dateien speichert es trotzdem, da sie unterschiedliche Naem haben, jedoch die E-Mail Texte werden nur von der ersten Nachricht gespeichert. Hat jemand einen Lösungsvorschlag oder kann mir kurz meinen Code ein bisschen umschreiben ?

' speichert jeden anhang der E-Mail
Dim i As Integer
i = 0
For Each objAtt In itm.Attachments
i = i + 1
objAtt.SaveAsFile saveFolder_bySender_date & "" & "(" & i & ")-" & objAtt.DisplayName
' clear object after saving each one
Set objAtt = Nothing
Next 'go to next attachment

' speichert ebenso den E-Mail Text im gleichen Ordner
itm.SaveAs saveFolder_bySender_date & "" & "email.txt", olTXT
'fertig
End If

markusxy
28.09.2017, 10:52
Du musst für die Texte auch unterschiedliche Dateinamen verwenden.:rolleyes:

Harmogy
28.09.2017, 11:52
Die ist mit bewusst, aber wie mach ich das am geschicktesten....
Nochmals ich bin nicht sehr vba begabt und das ist auch nicht der Kernpunkt meiner Arbeit, sondern nur eine kleine Erweiterung. Weshalb ich um Hilfe bitte..

Harmogy
28.09.2017, 11:56
Bzw könnte ich es so machen :

Dim i As Integer
i = 0
For Each objAtt In itm.Attachments
i = i + 1
objAtt.SaveAsFile saveFolder_bySender_date & "" & "(" & i & ")-" & objAtt.DisplayName
' leert Object
'Set objAtt = Nothing
Next 'geht zum Nächsten Anhang

' speichert ebenso den E-Mail Text im gleichen Ordner
itm.SaveAs saveFolder_bySender_date & "" & objAtt.DisplayName & ".txt", olTXT
'fertig
End If

Würde das Funktionieren ?

markusxy
28.09.2017, 12:34
Da geht es nicht um VBA sondern um Logik und Gesamtkonzept.

Nach welchem Prinzip willst du einen eindeutigen Dateinamen erstellen?
Wenn das klar ist, kannst du dich an den Code machen.


PS:
Das automatisierte Speichern von Anhängen ist für mich sehr fragwürdig.
Ich mach das in meiner Anwendung so, dass Dokumente in einer Datenbank verwaltet werden. Dann kann ich nach sinnvollen Konzepten suchen und die Docs unterschiedlichsten Sachverhalten innerhalb der DB zuordnen.

Das passiert aber nicht ohne User Interaktion und ohne das Dokument anzusehen. Papierloses Büro ist für mich schon lange gelebte Praxis.

Harmogy
28.09.2017, 13:37
Bisher Funktioniert alles...
Es fehlt nun lediglich das der Emailtext, als Textdatei mit dem namen der pdf gespeichert wird...

Schlussendlich bekommen wir nur Rechnungen, welche bereits angeschaut wurden in ein eigenes Postfach weitergeleitet. Diese sollen direkt auf der Festplatte abgelegt werden. Da es hier nur um Rechnungen geht, gibt es keinen Sachverhalt, ausschließlich Rechnungen.

Ebenso fragte ich darum ob sich jemand meinen Code-Ausschnitt anschauen kann, und eventuell einen Tipp hat. Ich verstehe weniger was das mit Logik und Gesamtkonzept zu tun hat. Das Konzept besteht bereits und das Script läuft. Da es jedoch mal passieren kann das Zwei Rechnungen an einem Tag von einem Lieferanten kommen, ist mir aufgefallen, nach erfolglosem Test, das nur die erste Mail gespeichert wird. nun geht es nur noch darum, das ist den Fehler nicht finde. :cool:

markusxy
28.09.2017, 16:10
Wenn du mehrere Anhänge hast, welche Namen willst du dann für die Textdatei verwenden. So was hat mit Logik zu tun.


itm.SaveAs saveFolder_bySender_date & "" & objAtt.DisplayName & ".txt", olTXT


kann nicht funktionieren da objAtt nach der For each Schleife keinen gültigen Wert haben kann.
Du musst also auf eine bestehende Anlage referenzieren.

Harmogy
28.09.2017, 16:16
Das heißt ? Kannst du mir da eventuell helfen ?

Harmogy
29.09.2017, 09:07
Guten Morgen Liebes MS-Office Forum,

Also ich habe es nun so gelöst das es die E-Mail nach der Zeit bennent, solange 2 Rechnungen nicht in einer Sekunde eintreffen funktioniert es. Nun habe ich noch eine Frage. Gibt es eine Möglichkeit auszulesen, ob sich die angehängte Datei um eine PDF handelt oder nicht ?`

Gruß
Kai