Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1480to1484
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
Inhaltsverzeichnis

Mit Suchbegriff bestimmte Ordner öffnen

Mit Suchbegriff bestimmte Ordner öffnen
11.03.2016 09:36:05
Dave
Hallo zusammen
Mein Anliegen ist ähnlich wie das von Katharina, vom 02.10.2012.
https://www.herber.de/forum/archiv/1280to1284/1280211_VBA_Datei_suchen_inkl_Unterordner.html
Und zwar:
In unseren Lieferantenlisten führen wir datenbankmässig pro Lieferant die LiefNr, LiefNamen, LiefEmail, Anrede, Textblöcke, etc. Sie beinhalten so ca. 50 bis 100 Lieferanten. Etwa ein Dutzend solcher Listen wird von einem Team betreut.
Im Netzwerkverzeichnis (G:\projekte\Q_E\Logistik\) besitzt jeder Lieferant sein eigenes Verzeichnis (Zihlmann_Profiltechnick_AG-094732) mit seiner typischen LiefNr am Ende des Verzeichnisnamens. Darin befinden sich die Terminlisten (07.03.2016-Termine-Zihlmann_Profiltechnick_AG-094732.xls) auch mit ihren typischen LiefNr im Dateinamen. Diese werden jeweils montags automatisch generiert und müssen dann manuell via Email an den Lieferanten versendet werden.
Gerne würde ich nun diese wöchentliche Routinearbeit per Makro automatisieren. Der Teil des Makros, welcher das Outlook initialisiert, eine neue Email öffnet, den AN:-Empfänger, den CC:-Empfänger, den Betreff und den Email-Body aus der Lieferantenliste pickt, steht bereit und funzt. Aber: In meiner Testversion wird der Anhang für das Email, d.h. die entsprechende Terminliste, „noch“ aus einem festcodierten Pfad entnommen. Das Modul mit der Serien-Mail-Prozedur habe ich weiter unten aufgeführt.
An dieser Stelle benötigt ein VBA-Frischling wie ich, eure Erfahrung und Hilfe. Für mein Verständnis müsste man an der Stelle der IF-Schleife, wo die entsprechende Terminliste übernommen wird:
• mit der LiefNr im Verzeichnis den entsprechenden Lieferantenordner auswählen
• Diesen Ordner öffnen und darin die letzte (gemäss Datum) Terminliste auswählen
• Diese Terminliste dann als String (strTerminFollowUp) in meine bestehende Prozedur übergeben
Die so ermittelte Terminliste kann dann im gerade aufbereiteten Email als Attachement angehängt werden.
Ich habe hier einiges versucht. Aber meine heutigen VBA-Kenntnisse reichen dafür leider nicht aus. Kann mir evtl. jemand von euch auf die Sprünge helfen?
Besten Dank.
Sub TerminFollowUpSerial()
'Andreas Thehos, http://thehosblog.com
Dim objOLOutlook As Object               'Variable für die Applikation Outlook
Dim objOLMail As Object                  'Variable für die einzelnen E-Mails
Dim intMailNr As Integer                 'Variable für die Anzahl Emails
Dim intZaehler As Integer                'Variable für den Zähler (welche Email-
Zeile wird gerade angesprochen)
Dim strTermineFollowUp As String         'Variable für die Terminliste
Dim strSignatur As String                'Variable für die Signatur
On Error GoTo ErrorHandler
Set objOLOutlook = CreateObject("Outlook.Application")
intMailNr = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
For intZaehler = 7 To intMailNr
If Cells(intZaehler, 1)  "" Then
Set objOLMail = objOLOutlook.CreateItem(olMailItem)
With objOLMail
.To = Cells(intZaehler, 10)
.CC = ""
.BCC = ""
.Sensitivity = 0
.Importance = 0
.Subject = "Termine Follow Up Alstom Grid Switzerland"
'.Attachments.Add strTermineFollowUp
'Hier sollte die Anlage (Terminliste) für den passenden
'Lieferanten aufgerufen werden!
.BodyFormat = olFormatHTML
.Body = Cells(intZaehler, 14) & vbCrLf & vbCrLf & _
Cells(intZaehler, 15) & vbCrLf & _
"Hier kommt die Signatur hin..."
.DeleteAfterSubmit = False
.Send
'.Display
End With
Set objOLMail = Nothing
End If
Next intZaehler
Set objOLOutlook = Nothing
Exit Sub 

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit Suchbegriff bestimmte Ordner öffnen
14.03.2016 14:10:07
Steve
Hallo Dave,
ich hätte das mit Hilfe des GetFolder-Befehls gelöst. Bei diesem kannst du ein Verzeichnis angeben und dann bei dem Objekt verschiedene Eigenschaften abfragen. Interessant ist hierbei die Eigenschaft "Subfolders". Weise ich das einer Variable zu kann ich mit einer For-Each-Schleife alle "Subfolder" super einfach durchgehen und auf den Suchbegriff/-nummer prüfen.
Da ich den "Subfolder" ebenfalls als Objekt vorliegen habe kann ich auch hier wieder viele Eigenschaften nutzen, z.B. ".Name", ."Files" uvm.. Wenn du den Namen deiner Terminliste bereits weist, kannst du den einfach an den Name hinten anhängen (hier als sAtt gespeichert).
Sub Test()
Dim oSubfolder As Object
Dim oSubfolders As Object
Dim sSuch As String, sAtt As String
Const sVerz As String = "G:\projekte\Q_E\Logistik"
sSuch = "094732" ' Bsp: Zihlmann_Profiltechnick_AG
'sSuch = Cells(intZaehler, 1) '?
Set oSubfolders = CreateObject("scripting.filesystemobject").GetFolder(sVerz).Subfolders
For Each oSubfolder In oSubfolders
If InStr(oSubfolder.Name, sSuch) > 0 Then
sAtt = oSubfolder & "\" & "Dateiname.xxx" 'Attachement
Exit For
End If
Next oSubfolder
Debug.Print sAtt
End Sub

Willst du jedoch die neuste Datei erst ermitteln, kannst du für den Subfolder die Files-Eigenschaft nutzen, nach dem gleichen Prinzip wie mit den Subfolders. Dann gehst du für jede Datei das Erstellungsdatum durch und merkst dir das neuste.
Sub Test()
Dim oSubfolder As Object
Dim oSubfolders As Object
Dim oFile As Object, oNewest
Dim sSuch As String, sAtt As String
Dim dNewest
Const sVerz As String = "G:\projekte\Q_E\Logistik"
sSuch = "094732" ' Bsp: Zihlmann_Profiltechnick_AG
'sSuch = Cells(intZaehler, 1) '?
Set oSubfolders = CreateObject("scripting.filesystemobject").GetFolder(sVerz).Subfolders
For Each oSubfolder In oSubfolders
If InStr(oSubfolder.Name, sSuch) > 0 Then
For Each oFile In oSubfolder.Files
If FileDateTime(oFile) > dNewest Then
dNewest = FileDateTime(oFile)
Set oNewest = oFile
End If
Next
Exit For
End If
Next oSubfolder
Debug.Print oNewest.Path
lg Steve
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige