Hallo!
ich habe folgende Frage: Ich habe es mit viel Hilfe geschafft ein Makro zu schreiben, was Daten aus anderen Dateien Sammelt und in einer Tabelle zusammenfast.
Jetzt habe ich aber folgende Probleme:
Erstens fängt er immer in Zeile 2 An Daten zu suchen.
Zweitens holt er sich Daten aus Dateien, die ich schon gelöscht habe.
Drittens: wirft er Daten aus, die nirgendwo stehen.
Vielleicht könnt Ihr mir weiterhelfen.
Hier mal der Code:
Sub Zusammenfassen()
Dim ArFiles()
Dim Q, Z
Dim R&, n&, nn&
Dim sQuellPfad$, sDir$
Dim wbGes As Workbook, wbQuelle As Workbook
sQuellPfad = "C:\Ringversuchsauswertungen\"
'Dateien Suchen
ChDrive sQuellPfad
ChDir sQuellPfad
sDir = Dir(sQuellPfad & "*.xls", vbNormal)
Do While sDir <> ""
ReDim Preserve ArFiles(n)
ArFiles(n) = sQuellPfad & sDir
n = n + 1
sDir = Dir$()
Loop
'alte Daten löschen
Set wbGes = ActiveWorkbook
With wbGes.Worksheets(1)
If .UsedRange.Cells(.UsedRange.Rows.Count, 1).Row > 2 Then
.Range(.Cells(3, 1), .Cells(.Rows.Count, 1)).EntireRow.Delete
End If
End With
'Datei gefunden?
If n > 0 Then
'Bremsen im Excel deaktivieren
Events_ False
'Quelle und Ziel.
Q = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S") 'Quellzellen
Z = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S") ' Zielspalten in Sammeldatei
'Startzeile in Sammeltabelle
R = 3
For n = LBound(ArFiles) To UBound(ArFiles)
'Datei öffnen
Set wbQuelle = Workbooks.Open(ArFiles(n), ReadOnly:=True)
'Datei Tabelle mit Index1
With wbQuelle.Worksheets(1)
'Schleife über Spalten im Array Q
For nn = LBound(Q) To UBound(Q)
With .Range(Q(nn) & 3, .Range(Q(nn) & .Rows.Count).End(xlUp))
wbGes.Worksheets(1).Range(Z(nn) & R).Resize(.Rows.Count).Value = .Value
End With
Next nn
End With
'schließen ohne speichern
wbQuelle.Close False
'nächste freie Zeile
With wbGes.Worksheets(1).UsedRange
R = .Cells(.Rows.Count, 1).Row + 1
If R < 3 Then R = 3
End With
Next n
'Bremsen im Excel wieder aktivieren
Events_ True
Else
MsgBox "keine Datei gefunden!"
End If
wbGes.Save
MsgBox "Fertig."
End Sub
Sub Events_(booOn)
Static lngCalc As Long
With Application
If booOn = False Then lngCalc = .Calculation
.Calculation = IIf(booOn, lngCalc, xlCalculationManual)
.ScreenUpdating = booOn
.EnableEvents = booOn
.DisplayAlerts = booOn
End With
End Sub