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

Forumthread: VBA: mehrere workbooks & -sheets

VBA: mehrere workbooks & -sheets
Dani
Hallo Excel- Koryphäen,
Habe folgendes Problem, wo ich keinen passenden code im Archiv finden konnte.
Habe 17 xls-files mit je 2 worksheets.
Der Tabellen-Aufbau ist immer identisch und ich möchte nun für all diese 17 workbooks & deren 2 worksheets die Spaltenbreite anpassen und einige Spalten löschen. Ich habe den folgenden – sehr umständlichen – code gebastelt, und diesen eben 18x kopiert (mit dem entsprechenden Namen der xls-Datei) ….
HILFE – was muss ich tun?
Workbooks("BAAP.xls").Worksheets("check").Activate
Rows("1:1").Insert Shift:=xlDown
Workbooks("Master.xls").Worksheets("Master").Range("A2:o2").Copy Destination:=Workbooks("BAAP.xls").Sheets("check").Range("A1:o1")
Columns(1).ColumnWidth = 15.14
Columns(2).ColumnWidth = 55.43
Columns(3).ColumnWidth = 13.5
Columns(6).ColumnWidth = 22
Columns(4).Delete Shift:=xlToLeft
Range("F:G").Delete Shift:=xlToLeft
Cells.Select
Cells.EntireRow.AutoFit
Sheets("to do").Select
Rows("1:1").Insert Shift:=xlDown
Workbooks("Master.xls").Worksheets("Master").Range("A2:o2").Copy Destination:=Workbooks("BAAP.xls").Sheets("to do").Range("A1:o1")
Columns(1).ColumnWidth = 15.14
Columns(2).ColumnWidth = 55.43
Columns(3).ColumnWidth = 13.5
Columns(6).ColumnWidth = 22
Columns(4).Delete Shift:=xlToLeft
Range("F:G").Delete Shift:=xlToLeft
Range("A1:L1").AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="BAAP"
ActiveSheet.UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp
ActiveSheet.ShowAllData
Cells.Select
Cells.EntireRow.AutoFit
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="C:\Ordner\BAAP" & "_" & Format(Date, "YYYY-MM-DD") & ".xls"
ActiveWorkbook.Close
p.s. den autofilter mach ich immer im worksheet „to do“, denn da sind doppelte Einträge aus dem worksheet „check“ drin sind. Wenn Ihr wisst, wie ich das auch schön lösen kann, bin ich Euch auf EWIG dankbar!
Viele Grüße
Dani
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA: mehrere workbooks & -sheets
02.08.2012 16:02:38
Helmut
Hallo,
hier ein Beispiel für den äußeren Rahmen. X- Beliebige Workbooks öffnen und in jedem jedes Sheet bearbeiten.
Im inneren Ramen (markiert) musst Du Deine BEarbeitungsschrite für das Sheet hineinbringen
Option Explicit
Sub xxx()
'   1.0 Variable deklarieren
Dim wbNamen As Variant, wbName As Variant, Wb As Workbook, Sh As Worksheet
'   1.3 Exportsheets auswählen
wbNamen = Application.GetOpenFilename(, , "Wählen Sie die Kundendateien aus", , True)
If Not IsArray(wbNamen) Then Exit Sub
'   -------------------------------------------------------------------------------------------- _
'   2.0 Mengengerüst in "Mengen" laden
'   2.1 Schleife über alle Workbooks
For Each wbName In wbNamen
'   2.2 Datei öffnen
Set Wb = Workbooks.Open(wbName)
For Each Sh In Wb.Sheets
' Hier kommt die Bearbeitung für jedes Worksheet hinein.
' Beispiel
Sh.Columns(1).ColumnWidth = 15.14
Next Sh
Wb.Close (False)
Next wbName
End Sub

Gruß
Helmut
Anzeige
AW: VBA: mehrere workbooks & -sheets
02.08.2012 16:06:01
Helmut
Hallo,
gerade noch einen kleinen Fehler gesehen
Es muss am Schluss heißen: Wb.Close (True)
;

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 für mehrere Workbooks und Sheets effizient nutzen


Schritt-für-Schritt-Anleitung

  1. Öffne die Workbooks: Verwende die Funktion Application.GetOpenFilename, um die gewünschten Workbooks auszuwählen.

    Dim wbNamen As Variant
    wbNamen = Application.GetOpenFilename(, , "Wählen Sie die Kundendateien aus", , True)
  2. Schleife über die Workbooks: Mit einer For Each-Schleife kannst du über jedes Workbook iterieren und es öffnen.

    For Each wbName In wbNamen
       Set Wb = Workbooks.Open(wbName)
  3. Bearbeite die Sheets: Verwende eine weitere Schleife, um durch alle Sheets in jedem Workbook zu gehen. Hier kannst du Anpassungen wie Spaltenbreiten oder das Löschen von Spalten vornehmen.

    For Each Sh In Wb.Sheets
       Sh.Columns(1).ColumnWidth = 15.14
       ' Weitere Bearbeitungsschritte hier
    Next Sh
  4. Schließe das Workbook: Am Ende der Bearbeitung solltest du das Workbook speichern und schließen.

    Wb.Close (True)

Häufige Fehler und Lösungen

  • Fehler: Type Mismatch beim Öffnen der Workbooks.

    • Lösung: Stelle sicher, dass die Auswahl tatsächlich eine Datei oder ein Array von Dateien ist. Überprüfe, ob IsArray(wbNamen) wahr ist.
  • Fehler: Object variable or With block variable not set.

    • Lösung: Überprüfe, ob das Workbook tatsächlich erfolgreich geöffnet wurde, bevor du versuchst, die Sheets zu bearbeiten.

Alternative Methoden

Anstelle von VBA kannst du auch Power Query verwenden, um Daten aus mehreren Workbooks zu importieren und zu transformieren. Dies ist besonders nützlich, wenn du nur Daten konsolidieren möchtest, ohne die Formate oder Strukturen der Worksheets zu bearbeiten.


Praktische Beispiele

Hier ein einfaches Beispiel, wie du mit VBA für jedes Worksheet in einem Workbook eine bestimmte Aktion ausführen kannst:

Sub AnpassungAlleSheets()
    Dim wb As Workbook
    Set wb = ThisWorkbook ' oder ActiveWorkbook

    For Each Sh In wb.Sheets
        Sh.Columns(1).ColumnWidth = 20
        ' Weitere Anpassungen
    Next Sh
End Sub

Dieses Skript geht durch jedes Sheet im aktuellen Workbook und passt die Spaltenbreite an.


Tipps für Profis

  • Verwende With-Anweisungen: Dies kann den Code lesbarer und schneller machen. Beispiel:

    With Sh
       .Columns(1).ColumnWidth = 15.14
       .Columns(2).ColumnWidth = 55.43
    End With
  • Nutze Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was dir hilft, Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Sheets und Worksheets in VBA?
Sheets bezieht sich auf alle Blätter in einem Workbook, während Worksheets nur auf die Arbeitsblätter (Excel-Sheets) verweist.

2. Wie kann ich mehrere Spalten gleichzeitig löschen?
Du kannst die Delete-Methode in einer Schleife verwenden oder einen Bereich angeben, z.B.:

Sh.Range("B:C").Delete Shift:=xlToLeft

3. Kann ich VBA auch für andere Excel-Versionen verwenden?
Ja, die meisten VBA-Funktionen sind in verschiedenen Excel-Versionen ähnlich, jedoch kann die Benutzeroberfläche variieren. Achte darauf, dass du die richtige Version verwendest, um Kompatibilitätsprobleme zu vermeiden.

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