ich möchte gerne mit einem Makro mehrere Tabelleblätter mit der selben Struktur auslesen und die Informationen in einem Sheet vereinen (untereinander kopieren).
Um die Daten zu kopieren habe ich die Funktion Database_fill()" geschrieben, welche auch gut funktioniert hat.
Nun wollte ich das kopieren von mehreren Sheets durch eine for-Schleife "TabellenBlätter()" erledigen lassen. Die Deklarierung der Variablen der "Database_fill()" habe ich der Funktion "TabellenBlätter()" hinzugefügt.
Leider funktioniert der Code nicht. Ich vermute dass die Werte nicht richtig übergeben werden.
Kann mir jemand einen Tipp geben wo der Fehler liegt?
Sub TabellenBlätter()
Dim Anfang_Input As Long ' First row of Input
Dim Ende_Input As Long ' Last row of Input
Dim Anfang_Output As Long ' First row of Output
Dim Ende_Output As Long ' Last row of Output
Dim WS As String ' Active worksheet
Dim ProcessName As String
Dim ProcessID As String
Anfang_Input = 2
Worksheets("database").Range("A2:Z1000000").ClearContents
Dim Anzahl As Long 'Anzahl der Tabellenblätter ermitteln
Anzahl = ThisWorkbook.Sheets.Count 'Anzahl = ThisWorkbook.Worksheets.Count
MsgBox Anzahl
'Tabellenblätter mit dem Index ansprechen
Dim i As Long
For i = 2 To Anzahl - 6 ' Ab Tabellenblatt 2 außer die letzten 6 Tabellenblätter
MsgBox i
Call Database_fill
Next i
End Sub
Sub Database_fill()
WS = ThisWorkbook.Worksheets(i)
ProcessName = Worksheets(WS).Cells(5, 7)
ProcessID = Worksheets(WS).Cells(4, 7)
'INPUT
'Copy Input Process name
Worksheets(WS).Range("D8:D37").Copy
Worksheets("database").Range("D" & Anfang_Input).PasteSpecial Paste:=xlPasteValues
'Copy Input Process ID
Worksheets(WS).Range("C8:C37").Copy
Worksheets("database").Range("E" & Anfang_Input).PasteSpecial Paste:=xlPasteValues
'Copy Input Value
Worksheets(WS).Range("E8:E37").Copy
Worksheets("database").Range("F" & Anfang_Input).PasteSpecial Paste:=xlPasteValues
'Input: Fill ProcessName and ProcessID
Ende_Input = Worksheets("database").Cells(Rows.Count, 6).End(xlUp).Row
Worksheets("database").Range("A" & Anfang_Input & ":" & "A" & Ende_Input).Value = ProcessName
Worksheets("database").Range("B2:B" & Ende_Input).Value = ProcessID
Worksheets("database").Range("C2:C" & Ende_Input).Value = "Input"
'OUTPUT - Die Process Values dienen als Grenze zwischen den Inputs und Outputs da diese immer _
_
befüllt sein sollen!
Anfang_Output = Ende_Input + 1
'Copy Output Process name
Worksheets(WS).Range("L8:L37").Copy
Worksheets("database").Range("D" & Anfang_Output).PasteSpecial Paste:=xlPasteValues
'Copy Output Process ID
Worksheets(WS).Range("M8:M37").Copy
Worksheets("database").Range("E" & Anfang_Output).PasteSpecial Paste:=xlPasteValues
'Copy Output Value
Worksheets(WS).Range("K8:K37").Copy
Worksheets("database").Range("F" & Anfang_Output).PasteSpecial Paste:=xlPasteValues
'Output: Fill ProcessName and ProcessID
Ende_Output = Worksheets("database").Cells(Rows.Count, 6).End(xlUp).Row
Worksheets("database").Range("A" & Anfang_Output & ":" & "A" & Ende_Output).Value = ProcessName
Worksheets("database").Range("B" & Anfang_Output & ":" & "B" & Ende_Output).Value = ProcessID
Worksheets("database").Range("C" & Anfang_Output & ":" & "C" & Ende_Output).Value = "Output"
Anfang_Input = Ende_Output + 1
End Sub