Clever-Excel-Forum

Normale Version: E-Mail durchsuchen, Pfad anlegen, speichern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
Seiten: 1 2