Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
684to688
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
684to688
684to688
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro in mehreren gleichartigen Dateien ausführen

Makro in mehreren gleichartigen Dateien ausführen
26.10.2005 21:13:51
Peter
Guten Abend
Ich habe in einem Ordner verschiedene Dateien, zum Beispiel A 2003.xls, B 2003.xls und C 2003.xls ... (nicht immer gleich viele Dateien)
In einem anderen File, das im gleichen Ordner abgelegt ist, sind die Namen dieser Dateien in der Spalte A eingetragen:
A1: A 2003.xls
A2: B 2003.xls
A3: C 2003.xls
A4: ...
Nun möchte ich das gleiche Makro in allen Dateien ablaufen lassen, indem ich der Reihe nach diese Dateien (die möglicherweise bereits offen sind oder nicht) aktiviere und beispielsweise jeweils in der ersten Tabelle, die "Daten" heisst, einen bestimmten Wert in Zelle A1 eintragen. Wenn ich dies bewerkstelligen könnte, könnte ich dann mein wirkliches Problem auch lösen.
Kann mir jemand helfen?
Danke, Peter

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
26.10.2005 21:32:18
Matthias
Hallo Peter,

Sub Makro()
Dim pfad As String, fn As String
Dim Datei As Range
Dim geöffnet As Boolean
pfad = ThisWorkbook.Path
Set Datei = ThisWorkbook.Sheets("Tabelle1").Range("A1") 'anpassen, hier stehen drr erste Dateiname
Do While Datei.Value <> ""
geöffnet = False
If Not WBOpen(Datei) Then
geöffnet = True
Workbooks.Open pfad & "\" & Datei
End If
Workbooks(Datei).Sheets("Daten").Range("A1") = "bestimmter Wert"
'wenn Mappe geöffnet wurde, dann diese speichern und schließen:
If geöffnet Then Workbooks(Datei).Close SaveChanges:=True
Set Datei = Datei.Offset(1, 0) 'nächtster Dateiname
Loop
End Sub
Function WBOpen(n As String) As Boolean
Dim wb As Workbook
For Each wb In Application.Workbooks
If UCase(wb.Name) = UCase(n) Then
WBOpen = True
Exit Function
End If
Next wb
End Function

Gruß Matthias
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:01:38
Peter
Hallo Mathias
Vielen Dank für das schnelle Feedback
Es sind noch ein paar Probleme aufgetaucht:
in der Do ... Loop Schlaufe muss ich wohl bei If Not WBOpen("Datei") Then, die Datei in Anführungszeichen setzen.
Die Prüfung, ob die Datei bereits offen ist, scheint nicht zu funktionieren, denn es folgt die Frage, ob die Datei wiedergeöffnet werden soll, was zu Datenverlust führen könne
Bei nachfolgender Befehlszeile geht es bei beiden Varianten nicht mehr weiter; könnte es sein, dass dies darauf zurückzuführen ist, dass auch hier Datei in Anführungszeichen zu setzen ist oder gibt es Probleme, weil der Dateiname Leerstellen hat? (emb ist der Name einer Zelle).
Workbooks(Datei).Sheets("_E").Range("ebm") = "500"
Workbooks(Datei).Sheets("_E").Range("H1") = "abc"
Danke für Feedback und freundlicher Gruss
Peter

Sub Makro_Dateien_bearbeiten()
Dim pfad As String, fn As String
Dim Datei As Range
Dim geöffnet As Boolean
pfad = ThisWorkbook.Path
Set Datei = ThisWorkbook.Sheets("Tabelle1").Range("A3") 'anpassen, hier steht der erste Dateiname
Do While Datei.Value <> ""
geöffnet = False
If Not WBOpen("Datei") Then
geöffnet = True
Workbooks.Open pfad & "\" & Datei
End If
Workbooks(Datei).Sheets("_E").Range("ebm") = "500"
'wenn Mappe geöffnet wurde, dann diese speichern und schließen:
If geöffnet Then Workbooks(Datei).Close SaveChanges:=True
Set Datei = Datei.Offset(1, 0) 'nächtster Dateiname
Loop
End Sub

Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:07:37
Matthias
Hallo Peter,
Datei ist eine Bereichsvariable, die auf die Zelle mit dem Dateinamen zeigt. Also keine Anführungszeichen, sonst prüft die Funktion, ob eine Mappe namens "Datei" geöffnet ist!
Ändere erst mal das und sag dann, was noch nicht fnktioniert.
Gruß Matthias
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:15:00
Peter
Hallo Mathias - das geht ja schnell wie der Wind (danke!)
Wenn ich Datei nich in Anführungszeichen setze, sopt es bei
If Not WBOpen(Datei) Then mit folgender Meldung:
Compile Error: ByRef argument type mismatch
Gruss, Peter
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:15:22
Peter
Hallo Matthias - das geht ja schnell wie der Wind (danke!)
Wenn ich Datei nich in Anführungszeichen setze, sopt es bei
If Not WBOpen(Datei) Then mit folgender Meldung:
Compile Error: ByRef argument type mismatch
Gruss, Peter
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:15:27
Peter
Hallo Matthias - das geht ja schnell wie der Wind (danke!)
Wenn ich Datei nich in Anführungszeichen setze, sopt es bei
If Not WBOpen(Datei) Then mit folgender Meldung:
Compile Error: ByRef argument type mismatch
Gruss, Peter
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:20:19
Matthias
Hallo Peter,
dann ändere mal die erste Zeile der Funktion:
Function WBOpen(ByVal n As String) As Boolean
Gruß Matthias
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:26:54
Peter
Hallo Matthias
Es öffnet mir nachwievor die erste Datei (die bereits geöffnet ist)
und bei nachfolgender Zeile kommt die Fehlermeldung: "Run-time error '13': Type mismatch"
Workbooks(Datei).Sheets("_E").Range("H1") = "abc"
Gruss, Peter
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 13:32:14
Matthias
Hallo Peter,
ok, mal überarbeitet:

Sub Makro()
Dim pfad As String, fn As String
Dim Datei As Range
Dim geöffnet As Boolean
pfad = ThisWorkbook.Path
Set Datei = ThisWorkbook.Sheets("Tabelle1").Range("A1") 'anpassen, hier stehen drr erste Dateiname
Do While Datei.Value <> ""
geöffnet = False
If Not WBOpen(Datei.Value) Then
geöffnet = True
Workbooks.Open pfad & "\" & Datei.Value
End If
Workbooks(Datei.Value).Sheets("Daten").Range("A1") = "bestimmter Wert"
'wenn Mappe geöffnet wurde, dann diese speichern und schließen:
If geöffnet Then Workbooks(Datei.Value).Close SaveChanges:=True
Set Datei = Datei.Offset(1, 0) 'nächtster Dateiname
Loop
End Sub
Function WBOpen(ByVal n As String) As Boolean
Dim wb As Workbook
For Each wb In Application.Workbooks
If UCase(wb.Name) = UCase(n) Then
WBOpen = True
Exit Function
End If
Next wb
End Function

Da "Datei" eine Range-Variable ist, muss die Eigenschaft .Value verwendet werden, wenn man nur den Zellinhalt übergeben will.
Gruß Matthias
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 14:48:17
Peter
Hallo Matthias
Nun läuft alles wie geschmiert.
Letzte Frage:
In jeder der Dateien ist ein Sub "berechnen()" hinterlegt. Wird dieser angewählt, werden in der jeweiligen Datei die Berechnungen aktualisiert. Wie kann ich diesen jeweils nach der Zeile
Workbooks(Datei.Value).Sheets("Daten").Range("A1") = "bestimmter Wert"
aufrufen?
Danke fürs Feedback
Peter
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 14:57:29
Matthias
Hallo Peter,
so:

Application.Run Datei.Value & "!Berechnen"

Gruß Matthias
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 15:26:27
Peter
Hallo Matthias
Der Befehl Application.Run Datei.Value & "!Berechnen" ergibt eine Fehlermeldung:
run-time error '13': The Macro 'Name der Datei.xls!Berechnen' can not be found.
Könnte es daran liegen, dass die Dateien, in welchen die Einträge erfolgen, zum Zeitpunkt des Eintrages gar nicht aktiv sind?
Gruss
Peter
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 16:21:51
Matthias
Hallo Peter,
'Name der Datei.xls!Berechnen', d.h. die Variable "Datei" zeigt auf eine Zelle, in der "Name der Datei" steht. Hast du evtl. in A1 sowas stehen? Dann ändere das Makro:

Set Datei = ThisWorkbook.Sheets("Tabelle1").Range("A1") 'anpassen, hier stehen der erste Dateiname

entsprechend, z.B. "A2", wenn da der erste Dateiname steht.
Gruß Matthias
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 18:30:22
Peter
Hallo Mathias
Ich habe nun 4 Versionen geprüft - davon geht nur eine, nämlich die vierte. Nun funktionert es also prima - vielen Dank.
Für mich stellt sich höchstens noch die Frage, weshalb hier die Eigenschaft "value" nicht nötig ist.
Gruss, Peter
'Application.Run Datei.Value & "!Berechnen" 'funktioniert nicht
'Application.Run Datei & "!berechnen" 'funktioniert nicht
'Application.Run Datei & "!" & "berechnen" 'funktioniert nicht
Application.Run "'" & Datei & "'" & "!" & "berechnen" 'Funktioniert
Anzeige
AW: Makro in mehreren gleichartigen Dateien ausfüh
27.10.2005 18:52:52
Matthias
Hallo Peter,
du hast recht, ein Dateiname mit Leerzeichen benötigt die einfachen Anführungszeichen drumrum.
Die Eigenschaft .Value ist nicht nötig, da diese die Default-Eigenschaft ist.
Gruß Matthias

148 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige