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

Forumthread: Excel VBA - Datein einlesen und inhalt kopieren

Excel VBA - Datein einlesen und inhalt kopieren
17.02.2015 14:05:53
Daniel
Hallo zusammen,
Ich erstelle ein Tool zur Auswertung von Exceltabellen.
Momentan stehe ich vor folgendem Problem:
Um eine Exceldatei auszuwerten muss ich zurzeit die zu auswertende Datei öffnen, STRG-A, STRG-C und dann in ein Tabellenblatt vom Tool STRG-V'en
Ich würde nun gerne ein Makro haben, welches automatisch eine Datei (Report_0615.xlsx) öffnet, Inhalt vom Tabellenblatt1 A1:O500 kopiert und in ein vorhandenes Blatt meines Tools einfügt. (Leistungsdialog.xlsm, "XY Report"). Danach Report_0615.xlsx am besten wieder automatisch schließen. Wenn ich nun einen anderen Report, zum Beispiel von der Vorwoche Report_0515.xlsx einlesen möchte, soll automatisch aus Leistungsdialog.xlsm, "XY Report" alles zuvor eingefügte gelöscht werden.
Ich bin im Thema VBA kompletter Anfänger. Habe nur ein paar Makros zum filtern aufgezeichnet und dann mit Grundkentnissen aus dem Informatikgrundkurs damals in der Schule verändert. Habe schon mein Problem gegoogelt, jedoch keine exakte lösung gefunden. Einfaches kopieren vorhandener Codes hat mir meist die Kopie meines Tools zerschossen, da einfach nicht das gemacht wurde, was ich wollte.
Ich hoffe ihr habt soweit mein Problem verstanden und bedanke mich schon einmal im Voraus.
Viele Grüße
Daniel

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA - Datein einlesen und inhalt kopieren
17.02.2015 18:08:47
Frank
Hallo Daniel,
warum googelst Du, wenn Du doch hier ein Fachforum hast? Zum Thema 'Datei öffnen' findest Du hier etliche Treffer. Den Makrorecorder kannst Du auch bedienen, wie Du schreibst. Mehr braucht man eigentlich nicht.
Datei öffnen:
Set wkb = Workbooks.Open("Pfad+Name", ReadOnly:=True)

Pfad + Name als Variable:
https://www.herber.de/forum/messages/1409191.html
Inhalte kopieren:

for i=1 to 500
for j=1 to 15
Workbooks("Leistungsdialog.xlsm").Sheets("XY Report").cells(i,j).value=wbk.sheets(1). _
cells(i,j).value
next
next

Letzteres ist langsam und geht auch anders und schneller,hat aber den Vorteil, sicher zu funktionieren und nur die Werte zu kopieren. Ansonsten gibt es leicht mal Probleme mit Formelbezügen.
Inhalt einer Zelle löschen:
Workbooks("Leistungsdialog.xlsm").Sheets("XY Report").cells(Zeile,Spalte).value=""
Grüsse,
Frank

Anzeige
AW: Excel VBA - Datein einlesen und inhalt kopieren
17.02.2015 18:24:32
Oberschlumpf
Hi Daniel
versuch mal (ungetestet)
1. Füge, wenn noch nicht geschehen, im VBE ein allgemeines Modul hinzu
(nennt sich in der Regel "Modul1", wenn du nicht weißt, was das ist)
2. Füge in dieses Modul nun diesen Code ein

'Teil 1
Option Explicit
Sub sbImport()
'Teil 1.1
Dim lstrFile As String
Dim lshThis As Worksheet, lshOther As Worksheet
'Teil 2
lstrFile = Application.GetOpenFilename("Excel Dateien (*.xlsx), *.xlsx")
If lstrFile = "Falsch" Then Exit Sub
'Teil 3
Workbooks.Open lstrFile
'Teil 4
Set lshThis = ThisWorkbook.Sheets("XY Report")
Set lshOther = ActiveWorkbook.Sheets(1)
'Teil 5
lshThis.Cells.Clear
lshOther.Range("A1:O500").Copy lshThis.Range("A1")
ActiveWorkbook.Close False
End Sub
Erklärung zum Code:
Teil 1
Man wird "gezwungen", alle Variablen zu deklarieren.
Besonders von Vorteil, wenn man Tippfehler erzeugt, das nicht sofort erkennt und sich dann wundert, warum etwas nicht funktioniert
Teil 1.1
Alle im Code verwendeten Variablen werden deklariert
Teil 2
Es öffnet sich ein Datei-Öffnen-Dialog, der dich auffordert, eine xlsx-Datei auszuwählen.
Klickst du auf Abbrechen oder ähnlich, wird mit Exit Sub der Code sofort abgebrochen.
Teil 3
Die von dir ausgewählte Datei wird geöffnet.
Teil 4
Die Variable lshThis erhält alle Funktionen,Methoden,Eigenschaften von deiner Tabelle mit dem Namen "XY Report"
Die Variable lshOther erhält alle Funktionen,Methoden,Eigenschaften von der 1. Tabelle aus der geöffneten Datei
Wichtig!
Wenn die von dir hier genannte Tabelle gar nicht "XY Report" heißt, musst du natürlich im Code den richtigen Tabellennamen eintragen.
Teil 5
Der Inhalt der Tabelle "XY Report" wird komplett gelöscht.
Der Bereich "A1:O500" aus der 1. Tabelle der geöffneten Datei wird kopiert + auch in den Bereich "A1:O500" in die Tabelle "XY Report" eingefügt.
Die zuvor von dir geöffnete Tabelle wird ungespeichert automatisch geschlossen...wie gewünscht
Hilfts?
Wenn nicht, zeig uns die 2 Dateien per Upload....gerne mit Bsp-Daten, aber zeig sie uns per Upload.
Ciao
Thorsten

Anzeige
AW: Excel VBA - Datein einlesen und inhalt kopieren
17.02.2015 18:44:04
Daniel
Hallo Frank, hallo Oberschlumpf,
vielen Dank für eure Hilfe. Ich werde morgen im Büro beide Ansätze ausprobieren, und mich dann nochmal melden.
Grüße Daniel

AW: Excel VBA - Datein einlesen und inhalt kopieren
18.02.2015 10:27:57
Daniel
Vielen Dank Thorsten,
dein Code ist für meinen Zweck perfekt. Klappt ohne Probleme!
Grüße Daniel
;
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Dateien einlesen und Inhalte kopieren


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei zu öffnen und deren Inhalte zu kopieren, kannst du den folgenden VBA-Code verwenden. Der Code öffnet eine Excel-Datei, kopiert die Inhalte des Bereichs A1:O500 und fügt sie in ein anderes Arbeitsblatt ein.

  1. Öffne deinen Excel-Arbeitsbogen und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu, falls noch nicht geschehen. Klicke im Projekt-Explorer mit der rechten Maustaste auf „DieseArbeitsmappe“ und wähle „Einfügen“ > „Modul“.
  3. Kopiere und füge den folgenden Code in das neue Modul ein:
Option Explicit

Sub sbImport()
    Dim lstrFile As String
    Dim lshThis As Worksheet, lshOther As Worksheet

    lstrFile = Application.GetOpenFilename("Excel Dateien (*.xlsx), *.xlsx")
    If lstrFile = "Falsch" Then Exit Sub

    Workbooks.Open lstrFile
    Set lshThis = ThisWorkbook.Sheets("XY Report")
    Set lshOther = ActiveWorkbook.Sheets(1)

    lshThis.Cells.Clear
    lshOther.Range("A1:O500").Copy lshThis.Range("A1")
    ActiveWorkbook.Close False
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro „sbImport“ auswählst und auf „Ausführen“ klickst.

Dieser Code ermöglicht das einlesen der Inhalte aus einer Excel-Datei und das kopieren von Daten in ein anderes Blatt.


Häufige Fehler und Lösungen

  • Fehler: „Laufzeitfehler 1004: Die Methode 'Range' für das Objekt 'Worksheet' ist fehlgeschlagen“

    • Lösung: Stelle sicher, dass das Arbeitsblatt „XY Report“ existiert und korrekt benannt ist.
  • Fehler: „Die Datei konnte nicht gefunden werden“

    • Lösung: Überprüfe den Pfad und den Dateinamen im Dialogfeld. Achte darauf, dass die ausgewählte Datei im richtigen Format vorliegt.

Alternative Methoden

Eine alternative Möglichkeit, Daten von einer Datei zu kopieren, ist die Verwendung von vba cells(x, y). Hierbei kannst du eine Schleife verwenden, um die Zellen einzeln zu kopieren:

Dim i As Integer, j As Integer
For i = 1 To 500
    For j = 1 To 15
        Workbooks("Leistungsdialog.xlsm").Sheets("XY Report").Cells(i, j).Value = _
            ActiveWorkbook.Sheets(1).Cells(i, j).Value
    Next j
Next i

Diese Methode kann langsamer sein, ist jedoch nützlich, wenn du spezifische Zellen bearbeiten möchtest.


Praktische Beispiele

Hier ein Beispiel, wie du den Code anpassen kannst, um eine andere Datei zu öffnen:

Sub sbImportReport()
    Dim lstrFile As String
    lstrFile = Application.GetOpenFilename("Excel Dateien (*.xlsx), *.xlsx")
    If lstrFile = "Falsch" Then Exit Sub

    ' Hier kannst du die Datei öffnen und die Daten kopieren
End Sub

Verwende diese Struktur, um verschiedene Berichte schnell und effizient zu laden und zu kopieren.


Tipps für Profis

  • Verwende ReadOnly:=True, wenn du die Datei nur zum Lesen öffnen möchtest. Dies kann helfen, versehentliche Änderungen an der Originaldatei zu vermeiden.
  • Declariere alle Variablen mit Option Explicit, um Tippfehler frühzeitig zu erkennen.
  • Berücksichtige die Verwendung von Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen, wenn du mit großen Datenmengen arbeitest.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Dateien auf einmal einlesen?
Du kannst eine Schleife verwenden, um durch einen Ordner zu iterieren und alle Dateien nacheinander zu öffnen und zu kopieren.

2. Was mache ich, wenn der Makro-Recorder nicht funktioniert?
Manchmal kann der Makro-Recorder ineffizienten Code erzeugen. Es ist besser, den Code manuell zu schreiben und zu optimieren, wie im obigen Beispiel gezeigt.

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