Guten Tag,
ich versuche mich gerade an folgendem Problem:
ich habe viele Exceldatein, indenen Maschinenparameter hinterlegt sind. Der Dateiname ist immer das Datum(Bsp. 01.02.06.xls)
Ich möchte jetzt für ein Jahr alle Datein auslesen. Und zwar immer bestimmte Zellen aus jeder Datein(immer die Gleiche Zelle). Die Ausgelesenen Daten möchte ich in einer Datei eintragen, damit ich sie später auswerten kann.
Als einfaches Beispiel:
Es gibt für jeden Tag eine Datei mit dem Datum als Dateiennamen(wie oben beschrieben).
Jetzt möchte ich aus allen Datein in einem Verzeichnis immer die Zelle A1 auslesen, in der die Betriebszeit steht. Die ausgelesenen Daten möchte ich in einer Datei zusammentragen, um die Gesamtlaufleistung aus der Maschine zu ermitteln.
Folgendes hatte ich probiert:
ich habe in einer Spalte das fortlaufende Datum erstellt. Habe dann mit Verketten damit und dem Verzeichnispfad die Zieldatei lokalisiert. In einer weiteren zelle dann noch den Pfad, die Datei und die Zelle zusammengefügt. Damit habe ich dann per „Indirekt“ mit verweis auf die Zelle versucht in die Datein mit den Daten zu greifen uns somit den Wert der Zelle zu kopieren. Leider hat dies nicht geklapp!
=INDIREKT(G25)
{Inhalt von G25} =("’"&D13&"["&(G23)&"]Tabelle1’!"&"$A$1")
{Inhalt von D13} 01.02.06.xls
{Inhalt von G23} C:\Maschinendaten
Hat jemand eine Idee?
Danke und beste Grüße!
Hallo,
deine Idee war nicht schlecht, aber leider funktioniert die Funktion „indirekt“ nicht mit externen Dateien, es sei denn Sie sind geöffnet.
Ich habe folgendes Makro entworfen, welches Dein Problem eigentlich schnell lösen sollte.
Es muss lediglich gewährleistet sein, dass immer das gleiche Datumsformat als Dateiname verwendet wird und alle Dateien im gleichen Ordner liegen.
Hier der Code:
Sub WerteAuslesen()
'diesen Bereich anpassen
Const DateiPfad = "C:\test\"
Const QuelleTabellenName = "Tabelle1"
Const QuelleZelle = "A1"
'anpassbarer Bereich Ende
Dim Dateiname As String
Dim Jahr As String
Dim SuchDatName As String
Dim GefDatName As String
Dim Inputdatei As Workbook
Dim Ausgabeblatt As Worksheet
Dim zeilenzähler
Jahr = InputBox("Bitte Jahr eingeben!")
If Jahr = "" Then Exit Sub
If Len(Jahr) = 4 Then Jahr = Right(Jahr, 2)
zeilenzähler = 1
SuchDatName = "??.??." & Jahr & ".xls"
Set Ausgabeblatt = ThisWorkbook.Worksheets(1)
GefDatName = Dir(DateiPfad & SuchDatName)
While Not GefDatName = ""
Set Inputdatei = Workbooks.Open(DateiPfad & GefDatName)
With Ausgabeblatt
.Cells(zeilenzähler, 1) = Left(GefDatName, 8)
.Cells(zeilenzähler, 2) = Inputdatei.Worksheets(QuelleTabellenName).Range(QuelleZelle)
End With
zeilenzähler = zeilenzähler + 1
Inputdatei.Close False
Set Inputdatei = Nothing
GefDatName = Dir()
Wend
If zeilenzähler = 1 Then MsgBox "Keine Datei für das eingegebene Jahr gefunden!"
End Sub
Gruß, tester
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
ich habe viele Exceldatein, indenen Maschinenparameter
hinterlegt sind. Der Dateiname ist immer das Datum(Bsp.
01.02.06.xls)
Ich möchte jetzt für ein Jahr alle Datein auslesen. Und zwar
immer bestimmte Zellen aus jeder Datein(immer die Gleiche
Zelle). Die Ausgelesenen Daten möchte ich in einer Datei
eintragen, damit ich sie später auswerten kann.
ich habe in einer Spalte das fortlaufende Datum erstellt. Habe
Hi Ingmar,
In A1:Ax stehen deine Daten, in H1:Hx erscheinen dann die Werte, ansonsten:
Tabellenblattname: Tabelle1
F G
1 Pfad C:\test
2 Tabelle Tabelle1
3 Zelle $A$1
4 Jahr 6
Dann in ein Modul:
Option Explicit
Sub Hole()
Dim Zei As Long, FormA As String, FormB As String, Jahr As Integer
Columns(8).Clear '1=A, B=2, H=8
Application.ScreenUpdating = False
FormA = "='" & [G1] & "\["
FormB = ".xls]" & [G2] & "'!" & [G3]
Jahr = IIf(Len([G4]) = 4, [G4], 2000 + [G4])
For Zei = 1 To Range("A65536").End(xlUp).Row 'letzte Zeile in A
If Year(Cells(Zei, 1)) = Jahr Then Cells(Zei, 8).Formula = FormA & Format(Cells(Zei, 1), "dd.mm.yy") & FormB '8=H
Next Zei
Range("H1:H" & Zei - 1).Copy
Range("H1").PasteSpecial Paste:=xlValues, Operation:=xlNone
Application.CutCopyMode = False
Range("H1").Select
Application.ScreenUpdating = True
End Sub
Gruß
Reinhard
Vielen Dank an alle! Hat mir geholfen, und das Problem gelöst!