Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Excel 2003 Makro: Öffnen, Aktualisieren, Speichern, Schließen
- Ersteller Hakaori
- Erstellt am
K
Klonky
Gast
Du kannst das mit einem Array lösen. Im array gibste die Pfade ein und dann machste dein Makro mit Foreach Eintrag im Array. Sollte net so schwer zum Umsetzen sein.
So sieht die Syntax von Arrays mit For Each aus
Sag wenn du mehr Hilfe brauchst![Lächeln :) :)](/forum/styles/smilies/smile.gif)
So sieht die Syntax von Arrays mit For Each aus
Code:
Public Function TeilerGefunden(Zahl As Long) As Long
Dim TeilerListe As Variant ' Liste der Primteiler
Dim Teiler As Variant ' Schleifenvariable
TeilerListe = Array(2, 3, 5, 7, 11, 13)
TeilerGefunden = Zahl
For Each Teiler In TeilerListe
If Zahl Mod Teiler = 0 Then
TeilerGefunden = Teiler
Exit Function
End If
Next Teiler
End Function
Sag wenn du mehr Hilfe brauchst
![Lächeln :) :)](/forum/styles/smilies/smile.gif)
C
Cave Johnson
Gast
Ich würde alle Pfad-/Dateiangaben in einer separaten Tabelle hinterlegen.
Die Liste kann man dann in einer Schleife durchlaufen:
Evtl. auch mit Pfaden in einer und Dateinamen in einer anderen Spalte:
Die Liste kann man dann in einer Schleife durchlaufen:
Code:
Dim rCell As Range, sFile As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A100")
sFile = rCell.Value
Workbooks.Open ...
Next rCell
Code:
Dim rCell As Range, sFile As String, sPath As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A100")
sPath = rCell.Value
sFile = rCell.Offset(0, 1).Value
Workbooks.Open ...
Next rCell
Zuletzt bearbeitet:
Stevensrest2000
Ensign
- Registriert
- März 2009
- Beiträge
- 163
Richtig, so haben wir das in unserer Firma geloest!
Ich danke euch so sehr für eure Hilfe, aber ihr müsst euch vorstellen ihr würdet es einem (dummen) Kind erklären.
Auf dem Tabellenblatt "Tabelle1" würde ich dann in A1 den Dateinamen eingeben (mit XLS?) und in B1 den Pfad?
Code:
Sub Alle_Exceldateien_nacheinander_öffnen()
Dim rCell As Range, sFile As String, sPath As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A100")
sPath = rCell.Value
sFile = rCell.Offset(0, 1).Value
Workbooks.Open ...
Next rCell
ActiveWorkbook.Save
ActiveWorkbook.Close
Loop
End Sub
Auf dem Tabellenblatt "Tabelle1" würde ich dann in A1 den Dateinamen eingeben (mit XLS?) und in B1 den Pfad?
C
Cave Johnson
Gast
In dem Beispiel wäre der Pfad in Spalte A und der Dateiname in Spalte B.
Ob beim Dateinamen die Endung mit dabei steht ist egal. Wenn es immer dieselbe ist, dann kannst du die natürlich auch im Makro anhängen:
Ob beim Dateinamen die Endung mit dabei steht ist egal. Wenn es immer dieselbe ist, dann kannst du die natürlich auch im Makro anhängen:
Code:
sFile = rCell.Offset(0, 1).Value & ".xls"
Ah okay.
Ich kriege bei "Workbooks.Open ..." einen Syntaxfehler bei Excel.
Ich kriege bei "Workbooks.Open ..." einen Syntaxfehler bei Excel.
Code:
Sub Alle_Exceldateien_nacheinander_öffnen()
Dim rCell As Range, sFile As String, sPath As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A100")
sPath = rCell.Value
sFile = rCell.Offset(0, 1).Value & ".xls"
[COLOR="Red"] Workbooks.Open ...[/COLOR]
Next rCell
ActiveWorkbook.Save
ActiveWorkbook.Close
Loop
End Sub
K
Klonky
Gast
Im Prinzip ist es einfach zu verstehen was passiert.
Du gibst nen Array an. Das ist eine Variable, die mehrere Einträge haben kann, wie oben im Beispiel, viele Zahlen. Das nutzen wir aus, indem wir mehrere Datein/Pfade angeben.
Durch das For Each sagen wir der Maschine, er soll Für jedes dann folgendes Ausführen.
Ich will das nicht einfach lösen, damit haste nichts gelernt, hoffentlich verstehste mich. Du sollst verstehen was da passiert und nicht einfach Copy Paste irgendwas reinhämmern und dann glücklich sein. Wird dir später helfen, wenn du weißt wie das funktioniert.
Wobei VBA meiner Meinung nach, einer der seltsamsten Programmiersprachen ist... Ich mags einfach nicht, die sind so eigenartig in der Syntax ... (; ? BRAUCHEN WIR NICHT!
)
Also nochmal zurück dazu.
Du musst eben mehrere Pfade in einem Array angeben. Sagst einfach Variable = "Pfad1", "Pfad2", "Pfad3" usw. Und dann mit dem For Each geht er jeden Pfad dann einfach durch, und macht dein Makro.
*edit*
Wieso weichst du so weit von deinem Ausgangsmakro ab? Ich meine du willst da was machen, deshalb musste das etwas anpassen nur. Du gibst oben nen Pfad an. Den musste nur in einen Array integrieren![Lächeln :) :)](/forum/styles/smilies/smile.gif)
Du gibst nen Array an. Das ist eine Variable, die mehrere Einträge haben kann, wie oben im Beispiel, viele Zahlen. Das nutzen wir aus, indem wir mehrere Datein/Pfade angeben.
Durch das For Each sagen wir der Maschine, er soll Für jedes dann folgendes Ausführen.
Ich will das nicht einfach lösen, damit haste nichts gelernt, hoffentlich verstehste mich. Du sollst verstehen was da passiert und nicht einfach Copy Paste irgendwas reinhämmern und dann glücklich sein. Wird dir später helfen, wenn du weißt wie das funktioniert.
Wobei VBA meiner Meinung nach, einer der seltsamsten Programmiersprachen ist... Ich mags einfach nicht, die sind so eigenartig in der Syntax ... (; ? BRAUCHEN WIR NICHT!
![Lächeln :) :)](/forum/styles/smilies/smile.gif)
Also nochmal zurück dazu.
Du musst eben mehrere Pfade in einem Array angeben. Sagst einfach Variable = "Pfad1", "Pfad2", "Pfad3" usw. Und dann mit dem For Each geht er jeden Pfad dann einfach durch, und macht dein Makro.
*edit*
Wieso weichst du so weit von deinem Ausgangsmakro ab? Ich meine du willst da was machen, deshalb musste das etwas anpassen nur. Du gibst oben nen Pfad an. Den musste nur in einen Array integrieren
![Lächeln :) :)](/forum/styles/smilies/smile.gif)
Zuletzt bearbeitet:
C
Cave Johnson
Gast
Da müssen natürlich die Pfad- und Dateiwerte angegeben werden:Hakaori schrieb:Ah okay.
Ich kriege bei "Workbooks.Open ..." einen Syntaxfehler bei Excel.
Code:
Sub Alle_Exceldateien_nacheinander_öffnen()
Dim rCell As Range, sFile As String, sPath As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A5")
sPath = rCell.Value
sFile = rCell.Offset(0, 1).Value & ".xls"
Workbooks.Open sPath & sFile
ActiveWorkbook.Save
ActiveWorkbook.Close
Next rCell
End Sub
C
Cave Johnson
Gast
Ich habe gerade gesehen, dass Excel evtl. zu schnell ist und nur die erste Datei zuverlässig geöffnet und neu gespeichert wird.
Da kannst du ggf. vor Next rCell noch eine kurze Pause einbauen, bevor die nächste Datei geöffnet wird:
Korrekterweise sollte man auch noch prüfen, ob die Datei überhaupt existiert, sonst gibts nen Fehler:
Man könnte das ganze auch so umbauen, dass man ausschließlich die Pfade angibt, und automatisch darin befindliche Exceldateien öffnet. Würde das Pflegen der Dateiliste vereinfachen.
Da kannst du ggf. vor Next rCell noch eine kurze Pause einbauen, bevor die nächste Datei geöffnet wird:
Code:
Application.Wait (Now + TimeValue("0:00:1")) [COLOR="Green"]'Wartezeit in Stunden:Minuten:Sekunden[/COLOR]
Code:
Sub Alle_Exceldateien_nacheinander_öffnen()
Dim rCell As Range, sFile As String, sPath As String
For Each rCell In Worksheets("Tabelle1").Range("A1:A5")
sPath = rCell.Value
sFile = rCell.Offset(0, 1).Value & ".xls"
If Dir(sPath & sFile) <> "" Then
Workbooks.Open sPath & sFile
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.Wait (Now + TimeValue("0:00:1"))
End If
Next rCell
End Sub
Zuletzt bearbeitet:
C
Cave Johnson
Gast
Hast du den Zellbereich an deine Liste angepasst?
Oben hatte ich mal A1:A100 geschrieben - das Makro läuft also nur bis Zelle A100 bzw. im letzten Code nur bis A5.
Code:
Worksheets("Tabelle1").Range("A1:A5")
Oben hatte ich mal A1:A100 geschrieben - das Makro läuft also nur bis Zelle A100 bzw. im letzten Code nur bis A5.
C
Cave Johnson
Gast
Besser wäre es da die jeweilige Datei direkt anzusprechen, nicht die aktive.
Ersetze
durch
Ersetze
Code:
ActiveWorkbook.Save
ActiveWorkbook.Close
Code:
Workbooks(sFile).Save
Workbooks(sFile).Close
C
Cave Johnson
Gast
Benutzt du die Pause im Code?
Dann dauerts pro Datei natürlich 1 Sekunde + die Zeit für's Öffnen, Speichern und Schließen.
Wenn du die Pause weglässt, gehts entsprechend schneller. Aber du solltest dann prüfen, ob alle Dateien korrekt aktualisiert werden (Änderungsdatum im Explorer prüfen).
Code:
Application.Wait (Now + TimeValue("0:00:1"))
Wenn du die Pause weglässt, gehts entsprechend schneller. Aber du solltest dann prüfen, ob alle Dateien korrekt aktualisiert werden (Änderungsdatum im Explorer prüfen).
Was genau soll denn per Hand schneller gehen ?
Wenn du z.B. erst alle Dateien öffnest, geht das wahrscheinlich schneller, als alle Dateien einzeln zu öffnen wie es das Makro macht.
Insgesamt sollte das Makro aber in jedem Fall schneller sein (kannst die Zeit ja mal stoppen) Z.B. kann man nebenbei wunderbar aufs Klo gehen oder sich nen Kaffee holen oder sowas![Zwinkern ;) ;)](/forum/styles/smilies/wink.gif)
Eventuell geht es aber schneller, dieses Verhalten per Makro zu simulieren. Dann müsstest du alle Dateien zunächst öffnen und erst danach speichern/schließen.
Des weiteren kann es auch helfen, die Bildschirmaktualisierung abzustellen. Dann siehst du zwar nicht mehr, wie die Dateien geöffnet bzw. geschlossen werden (der Bildschirm verändert sich nicht mehr), aber das Makro müsste schneller durchlaufen.
Das müsste mit "Application.ScreenUpdating = False" (bzw. true am Ende es Makros um es wieder einzuschalten) funktionieren (kann das für 2003 nicht testen).
Wenn du z.B. erst alle Dateien öffnest, geht das wahrscheinlich schneller, als alle Dateien einzeln zu öffnen wie es das Makro macht.
Insgesamt sollte das Makro aber in jedem Fall schneller sein (kannst die Zeit ja mal stoppen) Z.B. kann man nebenbei wunderbar aufs Klo gehen oder sich nen Kaffee holen oder sowas
![Zwinkern ;) ;)](/forum/styles/smilies/wink.gif)
Eventuell geht es aber schneller, dieses Verhalten per Makro zu simulieren. Dann müsstest du alle Dateien zunächst öffnen und erst danach speichern/schließen.
Des weiteren kann es auch helfen, die Bildschirmaktualisierung abzustellen. Dann siehst du zwar nicht mehr, wie die Dateien geöffnet bzw. geschlossen werden (der Bildschirm verändert sich nicht mehr), aber das Makro müsste schneller durchlaufen.
Das müsste mit "Application.ScreenUpdating = False" (bzw. true am Ende es Makros um es wieder einzuschalten) funktionieren (kann das für 2003 nicht testen).
Ähnliche Themen
- Antworten
- 7
- Aufrufe
- 9.486