verstanden! und gelöst.
14.12.2012 08:34:23
Klaus
Hi Justus,
hier ist dein neuer Code.
Beachte bitte: in deiner Beispieldatei hast du erklärende Texte rechts von den Tabellen stehen gehabt. Die müssen weg! (Grund: es werden die Anzahl Spalten gezählt)
Dein Button ruft Summieren auf. Ändere den um, damit der die Sub VieleTabellen aufruft.
Ich habe meine Codeergänzungen alle kommentiert, und den Originalcode nie gelöscht sondern immer nur auskommentiert. Wenn du den Code auf deine Masterdatei anwendest (die ist bestimmt größer mit mehr Tabellen?), lies bitte die Kommentare in meiner "VieleSummieren" Sub um zu verstehen welche Variablen du anpassen musst.
Mit Rücksicht auf dein Level habe ich den Code-Aufruf einfach gehalten, mit einem kopierbaren Aufruf pro Tabelle im Masterblatt.
Unten hab ich noch ein Beispiel, wie man viele Tabellen per Spalte jeweils aufrufen könnte - das aber auskommentiert, schaus dir an wenn du wirklich viele Tabellen hast.
Public Sub VieleTabellen()
'** dies Makro ruft das "Tabellen summieren" x-mal auf
Dim wksMy As String
Dim iCol As Integer
Dim lRow As Long
'hier das ZIEL-Worksheet definieren
wksMy = "sheet3"
'löscht Ziel
Worksheets(wksMy).Cells.ClearContents
'Tabelle #1 startet in Zeile 2, Spalte 2
lRow = 2
iCol = 2
Call Summieren(lRow, iCol, wksMy)
'Tabelle #2 startet in Zeile 9, Spalte 2
lRow = 9
iCol = 2
Call Summieren(lRow, iCol, wksMy)
'Tabelle #3 startet in Zeile 16, Spalte 2
lRow = 16
iCol = 2
Call Summieren(lRow, iCol, wksMy)
'** die drei Zeilen kannst du fortsetzen bis der Arzt kommt
'** einfach Copy, Paste und die lRow Variable hochsetzen
'** Alternative: den Aufruf in eine Schleife (wenns immer 7 Zeilen sind!!)
'iCol = 2
'For lRow = 2 To 16 Step 7
'Call Summieren(lRow, iCol, wksMy)
'Next lRow
'** dann ist es kürzer, und wenns mal 100 Tabellen werden ....
End Sub
'** = Kommentare von Klaus
'Public Sub Summieren()
Public Sub Summieren(lRow As Long, iCol As Integer, wksMy As String)
'** ich lasse das SUB mit variablen Zeilen und Spalten (und Ziel-Blatt) aufrufen
Dim lLastRow As Long
'** Kommentar von Klaus: Eine extra Variable
Dim dest As Worksheet
Dim cl1 As Range
Dim cl2 As Range
Dim cl3 As Range
Dim x_Werte As Range
Dim y_Werte As Range
Dim z_Werte As Range
Dim destrg As Range
Dim Summe As Double
'Set dest = Worksheets("sheet3") 'Festlegung Sheet3 als Zieltabelle
Set dest = Worksheets(wksMy)
'** hier mache ich das Ziel-Worksheet variabel, nur für den Fall der Fälle
'dest.Cells.Clear 'löschen der Zieltabelle
'** Das nehme ich mal raus, bringt ja nichts wenn
'** nach jeder Tabelle gelöscht wird .. dann währs ein Syssiphus-Makro
'Set destrg = dest.Cells(1, 1) 'Festlegung der Zielzelle als A1
lLastRow = dest.Cells(Rows.Count, 1).End(xlUp).Row + 1
Set destrg = dest.Cells(lLastRow, 1)
'** als Ziel nicht die erste Zeile, sondern die erste FREIE Zeile
'Bestimmung des X Wertes, wobei range("A2").end(xltoright).column bedeutet, dass von A2 bis _
zur letzten rechten Spalte
'(cells(2, 2)) = cells(Reihe, Spalte) = Zeile 2 Reihe 2, also B2
' Set x_Werte = Range(Cells(2, 2), Cells(2, Range("A2").End(xlToRight).Column))
' Set y_Werte = Range(Cells(3, 2), Cells(3, Range("A3").End(xlToRight).Column))
' Set z_Werte = Range(Cells(4, 2), Cells(4, Range("A4").End(xlToRight).Column))
Set x_Werte = Range(Cells(lRow, iCol), Cells(lRow, Range("A" & lRow).End(xlToRight).Column)) _
Set y_Werte = Range(Cells(lRow + 1, iCol), Cells(lRow + 1, Range("A" & lRow + 1).End( _
xlToRight).Column))
Set z_Werte = Range(Cells(lRow + 2, iCol), Cells(lRow + 2, Range("A" & lRow + 2).End( _
xlToRight).Column))
'** Das "SET" der Werte, aber variabel pro Tabelle
For Each cl1 In x_Werte
For Each cl2 In y_Werte
For Each cl3 In z_Werte
' ** TEST-Selects
' cl1.Select
' cl2.Select
' cl3.Select
Summe = cl1.Value + cl2.Value + cl3.Value
If Summe
Grüße,
Klaus M.vdT.