ich hatte mittels einem Button versucht basierend auf verschiedenen Spalten einen Wert zu berechnen. Dabei lautet die Formel "=WENN(Y3<>0; S3*0,9375; S3*1,0714)", welche jedoch abhängig von der jeweiligen Zeile sein soll.
Sub LBProzentrechnen() Dim Zeile As Integer Zeile = 3
Set book = ActiveWorkbook With book.Worksheets("Gehaltsdaten") While (.Cells(Zeile, 1) <> "") If (.Cells(Zeile, 25) <> "") Then .Cells(Zeile, 18).Value = Cells(Zeile, 19) * 0.9375 Else .Cells(Zeile, 18).Value = Cells(Zeile, 19) * 1.0714 End If
Zeile = Zeile + 1 Wend End With End Sub Jetzt möchte ich jedoch diesen Button ersetzen und die Berechnungen sollen stattdessen automatisch ausgelöst werden, wenn Werte im Datenblatt geändert werden. Dies habe ich mit dem Worksheet_Change-Event versucht und habe dazu den Makrorekorder verwendet, jedoch erhalte ich einen Laufzeit '1004'. Hat jemand eine Idee?
Sub LBProzent_Aufgezeichnet()
' ' LBProzent_Aufgezeichnet Makro ' ' Range("R3").Select ActiveCell.FormulaR1C1 = "=IF(RC[7]<>0, RC[1]*0.9375, RC[1]*1.0714)" Selection.AutoFill Destination:=Range("R3:R800"), Type:=xlFillDefault End Sub
@ Wastl Das Workbook_Change-Event ist unnötig, da hat ich wohl einen Denkfehler. Ich wollte es per VBA machen, damit ich es dynamisch gestalten kann, sprich dass es sich immer an die letzte befüllte Zeile orientiert. Ich muss nochmal nachhaken bezüglich der Aussage mit der "neuen leeren Arbeitsmappe". Die Formel soll an einer bestehenden Arbeitsmappe "Gehaltsdaten" angewandt werden.
@Steffl Ich verstehe leider nicht genau, was du meinst.
Ich habe keinen Fehler erhalten in einer neuen leeren Arbeitsmappe mit deinem Makro. Das bedeutet, die Fehlermeldung rührt woanders her. Da ich deine Mappe weder kenne noch habe, bleibt mir nur das in einer eigenen Mappe zu testen und da klappts.
Was Steffl sagen wollte: verwende für VBA - zum hier posten - bitte das 4. oder 5. Symbol von rechts im Beitrags-Editor.
der Code funktioniert jetzt doch, bis auf ein kleines Manko. Wie im Bild zu erkennen ist wird auch die Überschrift in Zelle (R2) mit einbezogen, was ich jedoch im Code nicht nachvollziehen kann.
Der dazugehörige Code ist:
Code:
Dim ZeileMax As Integer
ZeileMax = Cells(Rows.Count, 2).End(xlUp).Row
If Not Intersect(Target, Range("Y3:Y3000")) Is Nothing Then
With Range("R3") .FormulaR1C1 = "=IF(RC[7]<>0, RC[1]*0.9375, RC[1]*1.0714)" .AutoFill Destination:=Range("R3:R" & ZeileMax), Type:=xlFillDefault End With
End If
Zudem möchte ich erneut mit Formular1C1 in Spalte S die Summe der Spalten T bis Y berechnen, wobei die Buchstaben noch in Zahlen umgewandelt werden müssen. Hierbei habe ich versucht mit dem Makrorekorder die Funktion einzufügen. Jedoch bekomme ich hierbei eine Fehlermeldung (Laufzeitfehler '1004').
Moin! Warum verwendest Du keine intelligente Tabelle (Einfügen, Tabelle)? Dann brauchst Du kein VBA, sondern die Formeln schreiben sich automatisch fort, wenn Du einen neuen Datensatz einfügst oder anhängst!
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Moin Ralf, ich muss gerade mal nachfragen. Ist es dabei möglich die Formeln variabel auf die Zeilen anzupassen? Ich habe eine Excel-Datei, welche verschiedene Daten einliest, wobei die Zeilenanzahl variert. Deswegen versuche ich mit VBA die Anzahl an Zeilen herauszufinden und danach die Formeln für eben diese Zellen anzuwenden.