Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblätter aus geschlossener Datei kopieren

Tabellenblätter aus geschlossener Datei kopieren
16.06.2015 16:35:29
Marcel
Hallo Zusammen
Ich möchte aus einer geschlossenen Datei per VBA gewisse Tabellenblätter in eine neue übernehmen.
Im Internet habe ich einen Code gefunden, bei welchem ich ein Tabellenblatt übertragen kann und dies funktioniert auch.
Wie muss ich nun vorgehen, dass ich insgesamt 4 verschiedene Tabellenblätter übertragen kann?
Fies ist der Code für das eine Tabellenblatt.
Sub DatenHolen()
Dim WBZiel As Workbook, ExportDatei As Variant
Dim WBQuelle As Workbook, WSZiel As Worksheet
Set WBZiel = ThisWorkbook
'DateiÖffnen Dialog anbieten
ExportDatei = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls", , "Bitte  _
die Datei xyz.xls öffnen ...")
ExportDatei = CStr(ExportDatei)
If ExportDatei = "Falsch" Then Exit Sub
'öffnen der ausgewählten Datei
Set WBQuelle = Workbooks.Open(ExportDatei)
'Kopieren der Tabellen „Zeiten“ aus Datei „xyz“
Set WSZiel = WBZiel.Worksheets.Add(After:=WBZiel.Sheets(WBZiel.Sheets.Count))
WBQuelle.Worksheets("Zeiten").Cells.Copy WSZiel.Cells(1)
WSZiel.Name = "Zeiten"
WBQuelle.Close False
Set WBZiel = Nothing
Set WBQuelle = Nothing: Set WSZiel = Nothing
End Sub

Die weiteren Tabellenblätter heissen z.B. Material oder MerkmaLE.
Wie muss ich es ergänzen, dass auch die weiteren Tabellenblätter übertragen werden.
Besten Dank für die Hilfe.

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblätter aus geschlossener Datei kopieren
16.06.2015 18:38:17
Sepp
Hallo Marcel,
das geht z. B. so.
Sub DatenHolen()
  Dim ExportDatei As Variant
  Dim WBQuelle As Workbook, WBZiel As Workbook
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = -4135
    .DisplayAlerts = False
  End With
  
  Set WBZiel = ThisWorkbook
  
  'DateiÖffnen Dialog anbieten
  ExportDatei = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls", , "Bitte die Datei xyz.xls öffnen ...")
  ExportDatei = CStr(ExportDatei)
  If ExportDatei = "Falsch" Then Exit Sub
  
  'öffnen der ausgewählten Datei
  Set WBQuelle = Workbooks.Open(ExportDatei)
  
  With WBZiel
    WBQuelle.Sheets(Array("Zeiten", "Material", "Merkmale")).Copy After:=.Sheets(.Sheets.Count)
  End With
  
  WBQuelle.Close False
  
  Set WBZiel = Nothing
  Set WBQuelle = Nothing
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'DatenHolen'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Prozedur - DatenHolen"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
End Sub


Gruß Sepp

Anzeige
Korrektur
16.06.2015 18:40:37
Sepp
Hallo nochmal,
die Fehlerbehandlung war falsch!
Sub DatenHolen()
  Dim ExportDatei As Variant
  Dim WBQuelle As Workbook, WBZiel As Workbook
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = -4135
    .DisplayAlerts = False
  End With
  
  Set WBZiel = ThisWorkbook
  
  'DateiÖffnen Dialog anbieten
  ExportDatei = Application.GetOpenFilename("Micrsoft Excel-Dateien (*.xls),*.xls", , "Bitte die Datei xyz.xls öffnen ...")
  
  If ExportDatei <> CStr(False) Then
    
    'öffnen der ausgewählten Datei
    Set WBQuelle = Workbooks.Open(ExportDatei)
    
    With WBZiel
      WBQuelle.Sheets(Array("Zeiten", "Material", "Merkmale")).Copy After:=.Sheets(.Sheets.Count)
    End With
    
    WBQuelle.Close False
    
    Set WBZiel = Nothing
    Set WBQuelle = Nothing
    
    ErrExit:
    
    With Err
      If .Number <> 0 Then
        MsgBox "Fehler in Prozedur:" & vbTab & "'DatenHolen'" & vbLf & String(60, "_") & _
          vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
          "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
          .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
          "VBA - Fehler in Prozedur - DatenHolen"
        .Clear
      End If
    End With
    
  End If
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
End Sub


Gruß Sepp

Anzeige
AW: Korrektur
17.06.2015 08:25:17
Marcel
Hallo Sepp
Perfekt, genau das habe ich gesucht.
Echt genial.
Vielen Dank für die schnelle Hilfe, freu mich gerade rieseig.
Grüsse
Marcel
;

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

Tabellenblätter aus geschlossener Datei kopieren


Schritt-für-Schritt-Anleitung

Um mehrere Tabellenblätter aus einer geschlossenen Excel-Datei zu kopieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code öffnet die gewünschte Datei, kopiert die angegebenen Tabellenblätter und fügt sie in die aktuelle Arbeitsmappe ein.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
Sub DatenHolen()
    Dim WBZiel As Workbook, ExportDatei As Variant
    Dim WBQuelle As Workbook

    ' Setze das Zielarbeitsbuch
    Set WBZiel = ThisWorkbook

    ' DateiÖffnen Dialog anbieten
    ExportDatei = Application.GetOpenFilename("Excel-Dateien (*.xls),*.xls", , "Bitte die Datei auswählen...")

    ' Überprüfen, ob die Datei ausgewählt wurde
    If ExportDatei <> "Falsch" Then
        ' Öffne die ausgewählte Datei
        Set WBQuelle = Workbooks.Open(ExportDatei)
        ' Kopiere die gewünschten Tabellenblätter
        WBQuelle.Sheets(Array("Zeiten", "Material", "Merkmale")).Copy After:=WBZiel.Sheets(WBZiel.Sheets.Count)
        ' Schließe die Quelldatei
        WBQuelle.Close False
    End If

    Set WBZiel = Nothing
    Set WBQuelle = Nothing
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Drücke ALT + F8, um das Makro auszuführen und wähle DatenHolen.

Jetzt werden die Tabellenblätter "Zeiten", "Material" und "Merkmale" aus der geschlossenen Datei in Deine aktuelle Arbeitsmappe kopiert.


Häufige Fehler und Lösungen

  • Fehler: "Falsche Datei ausgewählt"

    • Lösung: Stelle sicher, dass Du die richtige Excel-Datei auswählst, die die Tabellenblätter enthält.
  • Fehler: "Das Makro kann nicht ausgeführt werden"

    • Lösung: Überprüfe, ob Makros in Deinen Excel-Einstellungen aktiviert sind.
  • Fehler: "Tabelle existiert bereits"

    • Lösung: Benenne die Tabellenblätter in der Zielarbeitsmappe um, bevor Du das Makro ausführst.

Alternative Methoden

Falls Du keine VBA verwenden möchtest, kannst Du auch die Daten manuell kopieren, indem Du die geschlossene Datei öffnest, die gewünschten Tabellenblätter kopierst und in die Zielarbeitsmappe einfügst. Diese Methode ist jedoch weniger effizient, besonders bei großen Datenmengen.

Eine weitere Möglichkeit wäre die Verwendung des Power Query-Add-Ins, um Daten aus einer geschlossenen Datei zu importieren, ohne sie manuell öffnen zu müssen.


Praktische Beispiele

Hier sind einige Beispiele, wie Du den VBA-Code anpassen kannst:

  1. Kopiere Daten aus mehreren Dateien:
Sub DatenVonMehrerenDateienHolen()
    Dim WBZiel As Workbook
    Dim WBQuelle As Workbook
    Dim ExportDatei As Variant

    Set WBZiel = ThisWorkbook

    Do
        ExportDatei = Application.GetOpenFilename("Excel-Dateien (*.xls),*.xls", , "Bitte die Datei auswählen...")
        If ExportDatei = "Falsch" Then Exit Do
        Set WBQuelle = Workbooks.Open(ExportDatei)
        WBQuelle.Sheets(Array("Zeiten", "Material", "Merkmale")).Copy After:=WBZiel.Sheets(WBZiel.Sheets.Count)
        WBQuelle.Close False
    Loop
End Sub
  1. Daten aus einer geschlossenen Datei importieren ohne sie zu öffnen:

Hierfür wäre es notwendig, ein anderes Verfahren zu verwenden, wie z. B. das Power Query-Add-In, das Dir erlaubt, Daten zu importieren, ohne die gesamte Datei öffnen zu müssen.


Tipps für Profis

  • Verwende Option Explicit am Anfang Deines VBA-Codes, um sicherzustellen, dass alle Variablen deklariert werden.
  • Nutze die Error-Handling-Methoden, um mögliche Fehler während der Ausführung des Makros zu erfassen und zu behandeln.
  • Du kannst die Funktion Application.ScreenUpdating = False verwenden, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren, was die Leistung verbessern kann.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Tabellenblätter auf einmal kopieren? Du kannst mehrere Tabellenblätter angeben, indem Du sie in einer Array-Form wie Array("Tabelle1", "Tabelle2") hinzufügst.

2. Kann ich Daten aus einer geschlossenen Datei kopieren, ohne sie im Hintergrund zu öffnen? Ja, Du kannst dies mit Power Query tun, das es ermöglicht, Daten zu importieren, ohne die gesamte Datei manuell zu öffnen.

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