Servus,
nachdem ich sämtliche Forenbeiträge durchstöbert habe, ich jedoch immer noch nicht auf eine Lösung gekommen bin, habe ich mich nun entschlossen aktiv zu fragen.
Ausgangspunkt:
Ich möchte meine Monate per Button aktualisieren. Die Aktualisierung erfolgt, indem ich vorher festgelegte Formeln kopiere, in die Spalte einfüge und die eingefügten Formeln nach unten bis zur letzten Zeile runter ziehe. Geht problemlos. Natürlich per VBA.
Problem:
Genau dasselbe Spiel, nur anstelle von 12 VBA-Codes für 12 Monate, will ich eine haben, die abhängig von der aktiven Zelle sind.
Beispiel: Ich klick auf die Zelle H2 (Januar). H2 ist jetzt meine aktive Zelle. Ich klicke auf den Button, um mein Makros auszuführen.
Makros sieht wo die aktive Zelle ist, springt ins Tabellenblatt "Parameter", kopiert den Bereich, springt zurück ins Tabellenblatt "Übersicht", fügt den kopierten Bereich ein, soll den eingefügten Bereich nun runter bis zur letzten Zeile ziehen, xlCalculationAutomatic, xlCalculationManual, den gesamten Bereich kopieren und einfügen, sodass nur noch Werte ausgegeben werden.
Ich hoffe, es ist verständlich, was ich beabsichtige.
Hier der VBA-Code:
Anmerkung: Der Auskommentierte Teil funktioniert, wie er soll. Ich wollte die Formel in Abhängigkeit der aktiven Zelle machen, jedoch komme ich hier nicht weiter. Ich bin ein VBA-Neuling.
/-----------------------------------------------/
Sub Übersicht_MonatAktualisieren()
'unter aktiver Zelle einfügen
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row 'Suche letzte beschriftete Zeile in Spalte A
If Not Intersect(ActiveCell, Range("H2:S2")) Is Nothing Then
Worksheets("Parameter").Range("H3:H45").Copy
Worksheets("Übersicht").Activate
With ActiveCell
.Offset(1).PasteSpecial xlPasteAll 'Gehe 1 Zelle runter und füge dort ein
.Range(ActiveCell.Address, Cells(ActiveCell.Row + 42, ActiveCell.Column - 7)).Select
Selection.AutoFill Destination:=Range(Cells(ActiveCell.Row - 1, ActiveCell.Column - 7), Cells(lastRow, ActiveCell.Column - 7)), Type:=xlFillDefault
End With
'Range("H3:H45").Select
'Selection.AutoFill Destination:=Range("H3:H" & lastRow), Type:=xlFillDefault
'Application.Calculation = xlCalculationAutomatic
'Application.Calculation = xlCalculationManual
'Range("H3:H45").Copy
'Range("H3:H45").PasteSpecial xlPasteValues
'Application.CutCopyMode = False
'MsgBox "Block wurde aktualisiert"
Else: MsgBox "Bitte erwünschten Monatsnamen in Zeile 2 anklicken!"
End If
End Sub
Falls notwendig habe ich hier nochmal die Formel für den Monat Januar ohne Abhängigkeit der aktiven Zelle:
Sub Makro1()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' Suche letzte beschriftete Zeile in Spalte A
'Einfügen in "ersten Block" (Ameropa - Jan/Feb/Mrz/...)
Worksheets("Parameter").Range("H3:H45").Copy
Worksheets("Übersicht").Range("H3:H45").PasteSpecial xlPasteAll
Range("H3:H45").Select
Selection.AutoFill Destination:=Range("H3:H" & lastRow), Type:=xlFillDefault
'Am Ende: Spaltenbereich kopieren, einfügen, nur Werte erhalten
Application.Calculation = xlCalculationAutomatic
Application.Calculation = xlCalculationManual
Range("H3:H" & lastRow).Copy
Range("H3:H" & lastRow).PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Januar wurde aktualisiert"
End Sub
|