889 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Spezialisten,

habe folgendes Problem und wäre dankbar wenn mir einer hilft.
Im Ordner "RECHNUNGEN" befinden sich jede Menge xls.Dateien (Rechnung1, Rechnung2, Rechnung3....). In einem neuen Ordner mit dem Arbeitsblatt "AUSWERTUNG" sollen nun aus all diesen Rechnungen aus dem jeweiligen Arbeitsblatt "Erfassung" die Zellen B5 und B33 eingelesen werden.
User Coros hat bei einer ähnlichen Anfrage am 27.11.2010 folgenden Code geschrieben. Komme aber nicht darauf welche Ordner ich in seinen Code einsetzten muss.
Sub Daten_kopieren()
Dim wkbQuelle As Object

Set wkbQuelle = GetObject(Sheets("Tabelle1").Range("B4"))

wkbQuelle.Sheets("Tabelle1").Columns("A:H").Copy ThisWorkbook.Sheets("Testdaten1").Range("A1")

wkbQuelle.Close

Set wkbQuelle = Nothing
End Sub

Du musst in obigen Code allerdings noch einige Namen anpassen, da mir diese nicht bekannt waren.

In Zeile

Set wkbQuelle = GetObject(Sheets("Tabelle1").Range("B4"))

muss der Blattname „Tabelle1“ gegen den Namen ausgetauscht werden, in dem bei Dir der Pfad in Zelle B4 steht.
Dann in der Zeile

wkbQuelle.Sheets("Tabelle1").Columns("A:H").Copy ThisWorkbook.Sheets("Testdaten1").Range("A1")

muss wieder der Name “Tabelle1” gegen den Namen ausgetauscht werden, der den zu kopierenden Inhalt der zu öffnenden Datei der Spalten A:H hat.

Viele Grüße,
Albert

2 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Albert!

Da Du recht wenig darüber geschrieben hast, wie und an welchen Stellen die ausgelesenen Daten aufgelistet werden sollen, habe ich mich für die Variante entschieden, im Blatt „Auswertung“ in Spalte A den Namen der Datei, aus der die Werte ausgelesen wurden, in Spalte B den Wert aus Zelle B5 und in Spalte C den Wert aus Zelle B33 aufzulisten. Nachfolgendes Makro öffnet alle Exceldateien in einem Verzeichnis, liest die Werte aus Zelle B5 und B33 aus und listet die Daten in der aktuellen Datei im Blatt „Auswertung“ untereinander auf.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Dim objFileSystem As Object
Dim objAnzDateien As Object
Dim objDateityp As Object
Dim wkbQuelle As Object

Dim lngFirstRow As Long

Const strPfad As String = "C:\Temp\"

Sub Prüfung()

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.Cursor = xlWait
.ErrorCheckingOptions.BackgroundChecking = False
End With

Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objAnzDateien = objFileSystem.getfolder(strPfad)

For Each objDateityp In objAnzDateien.Files
If Right(objDateityp.Name, 4) = ".xls" Then

Set wkbQuelle = GetObject(objDateityp.Path)

With Sheets("AUSWERTUNG")
lngFirstRow = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'Name der ausgelesenen Datei in Spalte A
.Cells(lngFirstRow, 1) = objDateityp.Name
'Wert aus Zelle B5 in Spalte B auflisten
.Cells(lngFirstRow, 2) = wkbQuelle.Sheets("Erfassung").Range("B5")
'Wert aus Zelle B33 in Spalte C auflisten
.Cells(lngFirstRow, 3) = wkbQuelle.Sheets("Erfassung").Range("B33")
End With

wkbQuelle.Close True
Set wkbQuelle = Nothing
End If
Next

ERRORHANDLER:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.Cursor = xlDefault
.ErrorCheckingOptions.BackgroundChecking = True
End With
End Sub
In dem Makro musst Du in der Zeile
Const strPfad As String = "C:\Temp\" noch den Namen des Pfades, in dem die Rechnungsdateien liegen, ändern. Dabei aber nicht die Anführungszeichen löschen, der Pfad gehört dazwischen.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.
MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von centomiglia Einsteiger_in (5 Punkte)
Hallo Oliver,

ich danke dir recht herzlich für deine Bemühungen. Es hat wunderbar funktioniert.
Finde es nicht selbstverständlich,dass sich jemand um anderer Leute Probleme kümmert.

Viele Grüße,
Albert
...