Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

ZielDatei aufgrund der QuellDatei finden + öffnen

ZielDatei aufgrund der QuellDatei finden + öffnen
Cornelia
Hallo zusammen!
Ich muss monatlich für alle Kunden bestimme Werte aus der aktuellen Excel-Datei in die des Vormonats kopieren. Die beiden Dateien sind in unterschiedlichen Verzeichnissen gespeichert und haben unterschiedliche Namen, allerdings beginnen beide jeweils mit der Kundennummer, worüber ich sie identifizieren kann.
Konkret öffne ich die Datei "4444-aktuell" im Verzeichnis "Dezember", suche die Datei "4444-Vormonat" im Verzeichnis "November", kopiere die Werte aus der Datei "4444-aktuell" und füge sie in der Datei "4444-Vormonat" ein, speichere resp. schliesse dann beide. So wird jede Datei, welche im Verzeichnis "Dezember" steht abgearbeitet.
Für das Kopieren und Einfügen habe ich mit dem Rekorder ein Makro aufgezeichnet, welches bestens funktioniert, wenn ich jeweils die beiden zusammengehörenden Dateien selber öffne.
Nun möchte ich das Makro so ergänzen, dass es selbständig die erste Datei im Verzeichnis "Dezember" öffnet, die dazu gehörende Datei im Verzeichnis "November" sucht und öffnet, die Kopierarbeit erledigt, die Dateien schliesst und dann die nächste Datei aus dem Verzeichnis "Dezember" genau gleich abarbeitet.
Zum Testen habe ich den Teil der Kopierarbeit mal weggelassen. Der nachfolgende Code funktioniert bis zum Öffnen der QuellDatei. Allerdings wird nicht die "oberste" Datei im Verzeichnis geöffnet, sondern irgendeine...aber ich glaube nicht, dass dies entscheidend ist, oder?
Bei der Zeile 'ZielDatei suchen' steht das Makro zwar im richtigen Verzeichnis, aber im Debugger wird eine andere Datei in strZiel angezeigt, die eben nicht mit der QuellDatei übereinstimmt. Somit springt das Makro auf die Else-Zeile.
Hier ist mein Code:

Sub Test_Oeffnen()
Dim Ziel As Workbook
Dim Quelle As Workbook
Dim zs As Object
Dim zVerz As Object
Dim zDatei As Object
Dim zDateien As Object
Dim qs As Object
Dim qVerz As Object
Dim qDatei As Object
Dim qDateien As Object
Dim strZiel As String
Set zs = CreateObject("Scripting.FileSystemObject")
Set zVerz = zs.GetFolder("F:\November\")
Set zDateien = zVerz.Files
Set qs = CreateObject("Scripting.FileSystemObject")
Set qVerz = qs.GetFolder("F:\Dezember\")
Set qDateien = qVerz.Files
For Each qDatei In qDateien
'QuellDatei öffnen
Application.DisplayAlerts = False
Set Quelle = Workbooks.Open(qDatei)
Application.DisplayAlerts = True
'ZielDatei suchen
strZiel = Dir("F:\November\*.xl*")
If strZiel Like (qDatei) Then
'ZielDatei öffnen
Application.DisplayAlerts = False
Set Ziel = Workbooks.Open(strZiel)
Application.DisplayAlerts = True
Else
'Fehlermeldung
MsgBox "die Datei ist nicht vorhanden!"
End If
'Kopierarbeit
Next qDatei
End Sub

Kann mir jemand helfen, wie ich die richtige ZielDatei finden und öffnen kann? Bin für jede Hilfe dankbar!
Grüsse
coko
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 13:20:55
Rudi
Hallo,
strZiel = Dir("F:\November\" &Left(qdatei.Name, 4) &"*.xl*")
und
If strZiel Like (qDatei) Then
durch
If strZiel"" Then
ersetzen.
Gruß
Rudi
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:08:56
Cornelia
Hoi Rudi
Herzlichen Dank für deine schnelle Hilfe! Ich habe den Code angepasst und ausprobiert: nun wird zwar die richtige Datei gefunden, aber sie wird nicht geöffnet.. :-( bei der Zeile "Set Ziel = Workbooks.Open(strZiel)" erscheint ein Laufzeitfehler 1004 / "xxx.xlsx" (hier wird die korrekte Datei genannt !?) konnte nicht gefunden werden. Überprüfen Sie die Rechtschreibung und den Speicherort der Datei.
Kannst du mir noch einmal weiterhelfen?
Gruss coko
Anzeige
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:21:05
Holger,
Hallo,
was erscheint denn bei debug.print strZiel?
Vielleicht ist hinten die Endung nicht richtig?
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:31:27
Cornelia
es erscheint der korrekte Dateiname inkl. der Endung "xlsx", was auch korrekt ist...
Zeig mal deinen ganzen Code! (owT)
20.12.2010 14:35:04
Renee

AW: Zeig mal deinen ganzen Code! (owT)
20.12.2010 14:43:56
Cornelia
Es ist immer noch der gleiche Code wie am Anfang, ich hab jeweils nur den Teil 'ZielDatei' suchen angepasst:
mit den Anpassungen von Rudi:

Sub Test_Oeffnen()
Dim Ziel As Workbook
Dim Quelle As Workbook
Dim zs As Object
Dim zVerz As Object
Dim zDatei As Object
Dim zDateien As Object
Dim qs As Object
Dim qVerz As Object
Dim qDatei As Object
Dim qDateien As Object
Dim strZiel As String
Set zs = CreateObject("Scripting.FileSystemObject")
Set zVerz = zs.GetFolder("F:\November\")
Set zDateien = zVerz.Files
Set qs = CreateObject("Scripting.FileSystemObject")
Set qVerz = qs.GetFolder("F:\Dezember\")
Set qDateien = qVerz.Files
For Each qDatei In qDateien
'QuellDatei öffnen
Application.DisplayAlerts = False
Set Quelle = Workbooks.Open(qDatei)
Application.DisplayAlerts = True
'ZielDatei suchen
strZiel = Dir("F:\November\" & Left(qDatei.Name, 4) & "*.xl*")
If strZiel  "" Then
'ZielDatei öffnen
Application.DisplayAlerts = False
Set Ziel = Workbooks.Open(strZiel)
Application.DisplayAlerts = True
Else
'Fehlermeldung
MsgBox "die Datei ist nicht vorhanden!"
End If
'Kopierarbeit
Next qDatei
End Sub


mit den Anpassungen von Renée:

Sub Test_Oeffnen()
Dim Ziel As Workbook
Dim Quelle As Workbook
Dim zs As Object
Dim zVerz As Object
Dim zDatei As Object
Dim zDateien As Object
Dim qs As Object
Dim qVerz As Object
Dim qDatei As Object
Dim qDateien As Object
Dim strZiel As String
Set zs = CreateObject("Scripting.FileSystemObject")
Set zVerz = zs.GetFolder("F:\November\")
Set zDateien = zVerz.Files
Set qs = CreateObject("Scripting.FileSystemObject")
Set qVerz = qs.GetFolder("F:\Dezember\")
Set qDateien = qVerz.Files
For Each qDatei In qDateien
'QuellDatei öffnen
Application.DisplayAlerts = False
Set Quelle = Workbooks.Open(qDatei)
Application.DisplayAlerts = True
'ZielDatei suchen
With ThisWorkbook
strZiel = Left(.Path, InStrRev(.Path, "\")) & _
Format(CDate("1." & Mid(.Path, _
InStrRev(.Path, "\") + 1, 20) & _
"." & Year(Date)) - 1, "mmmm") & "\" & _
.Name
End With
MsgBox strZiel
'ZielDatei öffnen
Application.DisplayAlerts = False
Set Ziel = Workbooks.Open(strZiel)
Application.DisplayAlerts = True
Else
'Fehlermeldung
MsgBox "die Datei ist nicht vorhanden!"
End If
'Kopierarbeit
Next qDatei
End Sub


Leider klappt beides noch nicht bis zum Schluss...
LG coko
Anzeige
Ersetze ThisWorkbook durch ActiveWorkbook (owT)
20.12.2010 14:56:59
Renee

AW: Ersetze ThisWorkbook durch ActiveWorkbook (owT)
21.12.2010 17:00:18
Cornelia
Hallo Renée
Entschuldige, ich habe deinen letzten Ratschlag nicht mehr umgesetzt, weil ich mit dem Code von Rudi schon ans Ziel kam. Trotzdem herzlichen Dank für deine Bemühungen!
aber ich hätte da noch eine private Frage: kannst du mir erklären, was das "(owT)" bedeutet, das du bei deinen Antworten immer anhängst? Sorry, das kenne ich leider nicht...
LG coko
o hne w eiteren T ext ;-) (owT)
21.12.2010 18:46:53
Renee

AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:39:37
Rudi
Hallo,
Set Ziel = Workbooks.Open(zVerz &"\" &strZiel)
Gruß
Rudi
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:59:23
Cornelia
Jupih ay eh!! Jetzt werden die "Zwillings-Dateien" jeweils korrekt gefunden und geöffnet :-) Nun habe ich nur noch eine kleine Befürchtung:
zum Testen habe ich den eigentlichen Kopier-Arbeits-Teil ja rausgenommen und einfach jeweils die QuellDatei und die dazugehörende Zieldatei geöffnet und so weiter. Nun frage ich mich, ob ich mit der 'for each'-Schleife nicht in eine Endlos-Schleife rassle? Ich möchte nämlich die erste QuellDatei und ZielDatei öffnen, Werte von der Quelle ins Ziel kopieren, beide Dateien speichern und schliessen und dann mit der nächsten Datei im QuellVerzeichnis weitermachen. Aber mit der Schleife macht er das doch einfach mit allen Dateien immer wieder, oder? Muss ich den Teil noch einmal überdenken?
Auf jeden Fall danke ich euch allen für die Super-Hilfe!
Gruss coko
Anzeige
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 15:05:44
Rudi
Hallo,
Aber mit der Schleife macht er das doch einfach mit allen Dateien immer wieder, oder?

Dann wäre For Each total blödsinnig.
Es wird mit allen Dateien 1x gemacht.
Gruß
Rudi
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
21.12.2010 17:12:08
Cornelia
Hi Rudi!
Bitte entschuldige die späte Antwort: ich wollte erst meinen code testen und schauen, ob das mit der Schleife so läuft wie ich mir das vorstelle, bevor ich mich weiter blamiere ;-) Aber leider bin ich dann im weiteren Code über ein nächstes Problem gestolpert...dafür hab ich einen neuen thread geöffnet.
Was die Schleife betrifft, glaube ich dir nun vertrauensvoll, dass es schon klappen wird - obwohl ich mir irgendwie nicht vorstellen kann, woher das Programm denn weiss, welche Datei schon bearbeitet wurde und welche nicht...wird da irgendwo im Hintergrund ein Flag gesetzt oder so? Ich meine, wenn als erste Datei die oberste im Verzeichnis geöffnet würde, könnte ich's ja nachvollziehen, aber dem ist ja nicht so..nun ja.
Ich hoffe, dass ich irgendwann das ganze Programm zum Laufen bekomme und dann werd' ich's ja sehen :-)
Auf jeden Fall, herzlichen Dank für deine Hilfe bis hier!
LG coko
Anzeige
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 13:29:58
Renee
Hi Coko,
Dieser Code (in der Quelldatei) sollte eigentlich den richtigen Namen in der Variablen strFullName zurückgeben:
Sub DateiVorMonat()
Dim strFullName As String
With ThisWorkbook
strFullName = Left(.Path, InStrRev(.Path, "\")) & _
Format(CDate("1." & Mid(.Path, _
InStrRev(.Path, "\") + 1, 20) & _
"." & Year(Date)) - 1, "mmmm") & "\" & _
.Name
End With
MsgBox strFullName
End Sub
GreetZ Renée
AW: ZielDatei aufgrund der QuellDatei finden + öffnen
20.12.2010 14:38:03
Cornelia
Renée,
in der Zwischenzeit habe ich deinen Code auch ausprobiert: dieser fällt bei mir in der Zeile
strZiel = Left(.Path, InStrRev(.Path, "\")) & _
Format(CDate("1." & Mid(.Path, _
InStrRev(.Path, "\") + 1, 20) & _
"." & Year(Date)) - 1, "mmmm") & "\" & _
.Name

auf die Nase und zwar mit einem Laufzeitfehler 13 / Typen unverträglich.
Ich kann deinen Code leider nicht so gut lesen, deshalb verstehe ich nicht ganz was die Geschichte mit Jahr/Datum soll...die Dateinamen beginnen alle mit einer vierstelligen Kundennummer - ohne ein Datum. Kommt die Typenunverträglichkeit vielleicht daher?
Gruss coko
Anzeige

157 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige