Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Excel: For Each Next, Tabelle auslesen usw.?

VBA Excel: For Each Next, Tabelle auslesen usw.?
08.02.2005 16:11:50
Andi
!!! SOS !!!
Hallo zusammen,
ich scheitere so ein bisschen am Setzen der richtigen Parameter bei einer For-Each-Next-Schleife. Ich möchte Folgendes tun:
Ich habe eine Quelldatei mit einer Liste von 20 Namen (xls oder txt empfohlen?).
Ich habe eine Haupt-Excel-Mappe, in der ich 20 Tabellenblätter habe, bezeichnet mit den o. g. Quellnamen.
Es gibt weitere 20 Excel-Dateien mit den gleichen Namen.
Zusammengefasst als Beispiel:
In der Quelldatei Namen.xls (oder namen.txt?) steht "Felix".
In der Haupt-Excel-Mappe gibt es neben all den weiteren ein Blatt namens "Felix".
Zusätzlich gibt es eine Excel-Tabelle namens Felix.xls.
Nun meine Frage:
Wie kann ich die Quelldatei 20mal auslesen
und in der Haupt-Excel-Mappe eine Folge von Befehlen ablaufen lassen,
so dass beispielsweise in jedem der 20 Tabellenblätter
jeweils in Zelle B4 das Wort "test" eingetragen wird
UND ebenfalls während dieser Befehlsabfolge die jeweilige der 20 Excel-Tabellen aufgerufen wird und dort ebenfalls in B4 das Wort "test" eingetragen wird ?
Ich benötige z. B. den konkreten Befehl, um das Sheet "Felix" nicht mit "Sheets("Felix").Select" aufzurufen, sondern mit einer entsprechenden Variable lt. Definition im Kopf der For-Each-Next-Schleife. Eine Alternative mit Variable brauche ich auch hierfür: "Windows("Felix.xls").Activate".
Ich danke euch im voraus! Ihr würdet mir SEEEEEEEEEEhr helfen!
Andi
Anzeige
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
Luc
Hallo Andi,
for each x in Workbooks("haupt").sheets
x.range("B4").formula="test"
workbooks(x.name).sheets("tab1").range("B4").formula="test"
next x
Viel Glück Luc
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
Luc
Ahoi Andi,
natürlich musst du x.name als Workbook(Datei)-Name noch um die übliche Endung ergänzen, also x.name & ".xls".
Ciao Luc
Anzeige
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
09.02.2005 09:40:56
Andi
Hallo Luc,
vielen Dank für deine schnellen Tips! Leider kam ich gestern nicht mehr zum Testen. Ich werde dies heute im Laufe des Tages versuchen.
Mal schauen, ob ich deine Tips unterkriege. Zur Not muss ich doch auf FOR-Next-Schleife zurückgreifen. Dann müsste ich aber die Anzahl der Namen in der Quelldatei immer durchzählen und im Macro entspr. anpassen. Na, hoffentlich gelingt mir eine Lösung.
Andi
Mein bisheriger Macrocode ohne deine Tips ist folg.:
*****************************
ChDir "C:\Test\J\M"
Workbooks.Open FileName:= _
"C:\Test\J\M\Haupt-Mappe.xls", UpdateLinks _
:=0
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
' Felix
Sheets("Felix").Select
ChDir "C:\Test\J\M"
Workbooks.Open FileName:="C:\Test\J\M\Felix.xls"
Windows("Haupt-Mappe.xls").Activate
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
Range("A4:AU60").Select
Selection.Copy
Windows("Felix.xls").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Range("Z27").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Ergebnisse.xls").Activate
Range("H4").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Windows("Felix.xls").Activate
Columns("AB:AD").Select
Selection.Delete Shift:=xlToLeft
Columns("AC:AD").Select
Selection.Delete Shift:=xlToLeft
With ActiveSheet.PageSetup
.PrintTitleRows = "$1:$2"
.PrintTitleColumns = "$A:$A"
End With
ActiveSheet.PageSetup.PrintArea = "$A$1:$AN$51"
Columns("AA:AN").Select
Selection.ColumnWidth = 8
Range("AD9").Select
ActiveWorkbook.Save
ActiveWindow.Close
***********************************
Anzeige
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
Luc
Hallo Andi,
das geht natürlich auch! Du kannst 2 Feldvariablen anlegen, die die Namen der Blätter und die der korrespondierenden Mappen in gleicher Reihenfolge enthalten (evtl auch automatisiert ermittelt). Dann kannst du natürlich über For...Next_index oder For_Each_subvar_In_feldvariable...Next_subvar die Mappen den Blättern zuordnen.
Erfolg Luc
PS: Aus einem "Makro" wird erst durch eine Schleife ein echtes Programm!
Anzeige
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
09.02.2005 14:46:56
Andi
Hallo Luc,
leider kriege ich das nicht hin. Da fehlen mir doch noch die Kenntnisse an der Stelle.
Könntest du mir BIIITTE evtl. im mitgelieferten Makrocode die Alternativ-Variablen (für Haupt-Mappe.xls, Felix.xls, Felix, Ergebnisse.xls) einsetzen mit For_Each-Schleife? Du scheinst ja ein echter Voll-Profi zu sein, wenn du so schnell mit Lösungsvorschlägen antwortest.
Übrigens ist der Eintrag 'Range("H36").Select' auch ein veränderlicher. Es sollen nämlich in der Zieltabelle Ergebnisse.xls alle Ergebnisse ab Zelle H4 untereinander eingetragen werden. Es sind also mehr als zwanzig Einträge. 20 war nur ein Beispiel.
Du wärst wahrscheinlich meine Rettung im Kampf gegen die Stunden.
Best greetz
Andi!
Anzeige
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
Luc
Hallo Andi,
will's etwa nicht so wie von mir geschrieben klappen? Ich weiß nicht, ob ich da heut noch ran kann. Muss jetzt los und hab mir ne TotalErkältung geholt.
Gruß Luc
AW: VBA Excel: For Each Next, Tabelle auslesen usw.?
11.02.2005 12:41:49
Andi
Hi Luc,
wäre es ein Angebot, wenn du mir deine Kontonummer schreibst und ich dir 10 EUR überweise, wenn du mir die Lösung präsentierst? Könnte gut sein, dass ich dich in zwei Wochen wieder brauche. Das wäre dann eine reine Zeitfrage für mich. So könntest du mal was mehr an deinem Wissen verdienen.
Andi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Excel: For Each Next Schleife zur Tabellenbearbeitung


Schritt-für-Schritt-Anleitung

  1. Öffne die Haupt-Excel-Mappe: Stelle sicher, dass die Haupt-Excel-Datei geöffnet ist.

    Workbooks.Open FileName:="C:\Test\J\M\Haupt-Mappe.xls"
  2. Definiere die Schleife: Verwende eine For Each-Schleife, um durch die Blätter zu iterieren.

    Dim x As Worksheet
    For Each x In ThisWorkbook.Sheets
       x.Range("B4").Value = "test"
    Next x
  3. Öffne die korrespondierenden Excel-Dateien: Für jede Iteration öffne die entsprechende Datei.

    Workbooks.Open FileName:="C:\Test\J\M\" & x.Name & ".xls"
  4. Trage Werte in die Zelle ein: Setze den Wert auch in der geöffneten Datei.

    x.Range("B4").Value = "test"
  5. Schließe die Dateien: Vergiss nicht, die geöffneten Dateien wieder zu schließen, um Speicherplatz zu sparen.

    Workbooks(x.Name & ".xls").Close SaveChanges:=True

Häufige Fehler und Lösungen

  • Fehler: "Subscript out of range"

    • Lösung: Stelle sicher, dass die Blattnamen und Dateinamen korrekt sind. Überprüfe, ob die Dateien tatsächlich existieren.
  • Fehler: "Object variable or With block variable not set"

    • Lösung: Überprüfe die Initialisierung der Objekte. Stelle sicher, dass ThisWorkbook korrekt referenziert ist.
  • Fehler bei der Zuweisung von Werten

    • Lösung: Achte darauf, dass die Zelle, in die du schreiben möchtest, existiert und zugänglich ist.

Alternative Methoden

Falls du keine Schleifen verwenden möchtest, kannst du auch die Application-Objekte verwenden, um die Arbeitsblätter direkt anzusprechen. Dies ist besonders nützlich, wenn du nur bestimmte Blätter bearbeiten möchtest.

Application.Worksheets("Felix").Range("B4").Value = "test"

Praktische Beispiele

Hier ist ein vollständiges Beispiel, das die obigen Schritte kombiniert:

Sub UpdateSheets()
    Dim x As Worksheet
    Dim wb As Workbook
    Dim filePath As String

    filePath = "C:\Test\J\M\"

    ' Hauptmappe öffnen
    Workbooks.Open FileName:=filePath & "Haupt-Mappe.xls"

    ' For Each Schleife
    For Each x In ThisWorkbook.Sheets
        x.Range("B4").Value = "test"

        ' Entsprechende Excel-Datei öffnen
        Set wb = Workbooks.Open(FileName:=filePath & x.Name & ".xls")
        wb.Sheets(1).Range("B4").Value = "test"
        wb.Close SaveChanges:=True
    Next x
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Tippfehler zu vermeiden und deine Variablen klar zu deklarieren.

  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler während der Ausführung zu handhaben und weiterzumachen.

  • Performance: Deaktiviere Bildschirmaktualisierungen und Berechnungen während der Schleife, um die Performance zu verbessern.

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen For Each und For Next in VBA?
For Each eignet sich hervorragend, um durch Sammlungen wie Arbeitsblätter oder Zellen zu iterieren, während For Next mehr Flexibilität bei Zählvariablen bietet.

2. Wie kann ich sicherstellen, dass meine Schleife effizient läuft?
Vermeide unnötige Berechnungen und Bildschirmaktualisierungen während der Schleifen. Dies kann die Ausführungszeit erheblich verkürzen.

3. Kann ich auch andere Excel-Objekte mit For Each verwenden?
Ja, du kannst For Each auch für Zellen, Bereiche und andere Sammlungen in Excel verwenden, was es zu einem vielseitigen Werkzeug macht.

4. Wie kann ich die Schleife anpassen, um nur bestimmte Blätter zu bearbeiten?
Du kannst eine If-Bedingung innerhalb der Schleife hinzufügen, um nur bestimmte Blätter basierend auf ihrem Namen oder anderen Eigenschaften zu bearbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige