Hallo liebe Outlook-Gemeinde,
ich suche weitere Möglichkeiten der Automatisierung meiner Arbeitsabläufe.
Folgende Ausgangssituation.
Geschäfliche E-Mails die ich versende tragen immer eine Zeile mit folgendem Text:
Aktenzeichen: AAA BBB CCC DDD
AAA, BBB und CCC ist eine jeweils dreistellige Zahlenkombination
DDD= Text von beliebige Länge, der optional angegeben wird
Ich möchte den Body der E-Mail nach "Aktenzeichen:" durchsuchen lassen und den Text rechts
davon weiterverarbeiten und als Pfadangaben auf der Festplatte behandeln.
Die Ablagestruktur entspricht:
"C:/AAA BBB/CCC/DDD
Wie ich benötige lediglich Hilfe bei der "Zerlegung" des Strings nach "Aktenzeichen:".
Den Rest des Codes bekomme ich selbst hin.
Weiß wer Rat?
Danke
Gruß
tmessers
Dieses mal möchte ich den Textkörper (.body) einer E-Mail
Hallo!
Public Sub ReadMailbody()
Dim objMail As Outlook.MailItem
Dim varAZ As Variant
Dim strAZ As String
Select Case True
Case TypeOf Application.ActiveWindow Is Outlook.Inspector
Set objMail = Application.ActiveInspector.CurrentItem
Case Else
With Application.ActiveExplorer.Selection
If .Count Then Set objMail = .Item(1)
End With
If objMail Is Nothing Then Exit Sub
End Select
varAZ = Split(objMail.Body, vbCrLf) ' Body auslesen
strAZ = Replace(varAZ(0), "Aktenzeichen: ", "") 'Zeile mit Aktenzeichen
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media
Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0
Gruß, René
@Rene
Danke für Deine Antwort.
Ich werde den Code mal bei mir einbauen und dann eine Rückmeldung geben.
Gruß
tmessers
Hallo Rene,
danke für Deinen Code. Er hilft mir weiter.
Wie bekomme ich es hin den Codeteil
strAZ = Replace(varAZ(0), "Aktenzeichen:", "")
variabel zu halten.
So wie Deinen Code lese, muss der String "Aktenzeichen" immer in der
gleichen Zeile stehen.
Gruß
tmessers
Hallöchen,
Hier trennst Du den Body an den Zeilenenden:
varAZ = Split(objMail.Body, vbCrLf) ' Body auslesen
Trenne ihn stattdessen am Aktenzeichen ...
varAZ = Split(objMail.Body, "Aktenzeichen: ") ' Body auslesen
Der nachfolgene Code stellt das Ergebnis meiner Mühen und Eurer Hilfe dar.
Eine Sache würde ich gerne einbauen:
Bei der Prüfung ob ein Dateipfad bereit existiert prüft mein Code, ob
eine Zahlenkombination als Dateipfad existiert.
Code: If Dir("C:\Users\Name\Documents\Excel\" & az1 & " " & az2, vbDirectory)
Bespiel: C:\Users\Name\Documents\Excel\111_222
Um die Übersicht zu behalten passen meine Kollegen den Pfad gerne an.
C:\Users\Name\Documents\Excel\111_222 Schrauben
Mein Code findet den Dateipfad dann natürlich nicht, eigentlich ist das aber der Ordner in den ich gerne
speichern möchte.
Weiß wer einen Rat, wie ich meinen Code entsprechend anpassen kann?
Code:
Private Sub UserForm_Activate()
Dim varAZ As Variant
Dim strAZ As String
Select Case True
Case TypeOf Application.ActiveWindow Is Outlook.Inspector
Set objMail = Application.ActiveInspector.CurrentItem
Case Else
With Application.ActiveExplorer.Selection
If .Count Then Set objMail = .Item(1)
End With
If objMail Is Nothing Then Exit Sub
End Select
varAZ = Split(objMail.Body, vbCrLf) ' Body auslesen Zerlegt Body in einzelne Zeilen
For i = UBound(varAZ) To 0 Step -1
If InStr(1, varAZ(i), "Az.:") > 0 Then
zeile = Split(varAZ(i), Chr(32))
intcount = UBound(zeile)
az1 = Trim(zeile(1))
az2 = Trim(zeile(2))
az3 = Trim(zeile(3))
If intcount > 3 Then
az4 = Trim(zeile(4))
az5 = Trim(zeile(5))
Else: GoTo Sprung1
End If
End If
Next i
Sprung1:
If az1 = "" And az2 = "" Then
Az_Kontrolle.Hide
msgbox "Es wurde kein Aktenzeichen gefunden!", vbCritical
Exit Sub
Else
TextBox1.Value = az1
TextBox2.Value = az2
TextBox3.Value = az3
TextBox4.Value = az4 & " " & az5
End If
End Sub
Private Sub CommandButton1_Click()
Az_Kontrolle.Hide
az1 = TextBox1.Value
az2 = TextBox2.Value
az3 = TextBox3.Value
az4 = TextBox4.Value
If Dir("C:\Users\Name\Documents\Excel\" & az1 & " " & az2, vbDirectory) = "" Then
msgbox ("Der Pfad existiert nicht" & vbLf & "Wollen sie den Pfad \Dokumente\" & az1 & " " & az2 & " erzeugen?"), vbYesNo
If vbYes Then
MkDir ("C:\Users\Name\Documents\Excel\" & az1 & " " & az2)
Else
Exit Sub
End If
End If
If Dir("C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3, vbDirectory) = "" Then
msgbox ("Der Pfad existiert nicht" & vbLf & "Wollen sie den Pfad \Dokumente\" & az1 & " " & az2 & "\" & az3 & " erzeugen?"), vbYesNo
If vbYes Then
MkDir ("C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3)
Else
Exit Sub
End If
End If
If Dir("C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3 & "\" & az4, vbDirectory) = "" Then
msgbox ("Der Pfad existiert nicht" & vbLf & "Wollen sie den Pfad \Dokumente\" & az1 & " " & az2 & "\" & az3 & "\" & az4 & " erzeugen?"), vbYesNo
If vbYes Then
MkDir ("C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3 & "\" & az4)
Else
Exit Sub
End If
End If
Select Case True
Case TypeOf Application.ActiveWindow Is Outlook.Inspector
Set objMail = Application.ActiveInspector.CurrentItem
Case Else
With Application.ActiveExplorer.Selection
If .Count Then Set objMail = .Item(1)
End With
If objMail Is Nothing Then Exit Sub
End Select
dateiname = objMail.Subject
If az4 = "" Or az4 = " " Then
objMail.SaveAs "C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3 & "\" & dateiname & ".msg", olMSG
Else
objMail.SaveAs "C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3 & "\" & az4 & "\" & dateiname & ".msg", olMSG
End If
msgbox "Die Nachricht wurde unter C:\Users\Name\Documents\Excel\" & az1 & " " & az2 & "\" & az3 & "\" & az4 & " gespeichert"
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
End Sub
Hallöchen,
zeige die Pfadbestandteile statt in TextBoxen in Labels an. Label können nicht vom User geändert werden.
Dank schauan,
ich bin der einzige der den Code nutzt. Die Textboxen werden also nicht geändert.
Die Erweiterung der Ordnernamen sind durch die Kollegen bereits eingetragen. Da
will ich nichts ändern.
Gibt es eine andere Möglichkeit?
Hallöchen,
wenn die Kollegen die Pfade im Tabellenblatt ändern, dann schütze das Blatt und lasse nur die Bereiche frei, wo die Kollegen was machen dürfen.
Es gibt kein Tabellenblatt.
Der Code liest eine E-Mail aus, sucht nach dem Kürzel "Az.:", teilt den nachfolgenden String,
erzeugt die Variablen für den Pfadnamen und speichert die E-Mail dann unter dem Pfadnamen ab.
Das Aktenzeichen (Az.:) besteht grunsätzlich aus eine Kombination von 3 dreistelligen Ziffernfolgen.
Beispiel: 111 222 333
Jede Ziffernfolge hat eine bestimmt Bedeutung.
Der Dateipfad setzt sich dann aus der Ziffernfolge zusammen.
Beispiel: .../111 222/333
Um gerade bei weniger gebräuchlichen Aktenzeichen eine bessere Zuordnung
zu ermöglichen, ergänzen die Kollegen zum Beispiel.
.../111 222 Schrauben/333
Mein Code, der nur die nummerischen Ziffernfolgen verarbeitet prüft ob der Dateipfad angelegt wurde.
Ich brauche eine Lösung, die den Pfadnamen auf die Ziffernfolgen prüft. ist die Ziffernfolge vorhanden, soll er keinen
neuen Ordner anlegen. Findet er die Ziffernfolge nicht, so soll er einen Ordner anlegen.
Ich benötige eine Art Platzhalter an der Stelle nach az2 im nachfolgenden Code.
Code:
If Dir("C:\Users\Name\Documents\Excel\" & az1 & " " & az2 , vbDirectory) = "" Then