Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Laufzeitfehler 1004

Forumthread: Laufzeitfehler 1004

Laufzeitfehler 1004
19.03.2025 20:00:32
BigGisY
Hi zusammen,

alle Jahre wieder muss ich was in Excel und VBA erstellen.

In diesem Fall soll beim Change eines Dropdownfelds eine Formel mittels VBA überschrieben werden. Soweit so gut. Dachte ich zumindest.

ActiveSheet.Range("M" & ActiveCell.Row).Formula = "'=WENN(G'" & ActiveCell.Row & "-F" & ActiveCell.Row & ">0;(G" & ActiveCell.Row & "-F" & ActiveCell.Row & ")*E" & ActiveCell.Row & ";"""")"


Ich finde den Fehler einfach nicht.

Kann mir jemand helfen?

Danke.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004
19.03.2025 20:04:25
BigGisY
Ich habe jetzt so schnell keinen Button zum Bearbeiten gefunden.

Ich habe den falschen Code reinkopiert.

Das ist der Code, der aber nicht geht.
ActiveSheet.Range("M" & ActiveCell.Row).Formula = "=WENN(G" & ActiveCell.Row & "-F" & ActiveCell.Row & ">0;(G" & ActiveCell.Row & "-F" & ActiveCell.Row & ")*E" & ActiveCell.Row & ";"""")"



Sorry für den doppelten Beitrag.
Anzeige
AW: Laufzeitfehler 1004
19.03.2025 20:24:05
Ulf
Hi,

ActiveSheet.Range("M" & ActiveCell.Row).FormulaLocal = "=WENN(G" & ActiveCell.Row & "-F" & ActiveCell.Row & ">0;(G" & ActiveCell.Row & "-F" & ActiveCell.Row & ")*E" & ActiveCell.Row & ";"""")"

hth
Ulf
AW: Laufzeitfehler 1004
19.03.2025 21:04:40
Yal
Hallo BigGisY,

Wenn Du eine Formel mit deutschen Bezeichner ablegen möchtest, musst Du es über FormulaLocal machen.

Vor dem >0 solltest Du die Substraktion auch in Klammer stellen, um die Reihenfolge zu sichern.
Bezeichner, die sich wiederholen, kann man mit "With" festhalten, um dann nur ab dem Punkt weiterzuschrieben:
    With ActiveCell

.EntireRow.Range("M1").FormulaLocal = "=WENN((G" & .Row & "-F" & .Row & ")>0;(G" & .Row & "-F" & .Row & ")*E" & .Row & ";"""")"
End With

"M1" ist bei ActiveCell.EntireRow immer in der eine Zeile (relative Adressierung), also in Zeile 5 entspricht es "M5")

Da übrigens "(A - B) > 0" das gleiche wie "A > B" ist ...
    With ActiveCell

.EntireRow.Range("M1").FormulaLocal = "=WENN(G" & .Row & ">F" & .Row ";(G" & .Row & "-F" & .Row & ")*E" & .Row & ";"""")"
End With


VG
Yal
Anzeige
AW: Laufzeitfehler 1004
20.03.2025 11:52:41
daniel
Hi
das mit dem FormulaLocal wurde ja schon erklärt

in diesem Fall (Formel kommt in die gleiche Zeile, welche auch in der Formel verwendet wird)
würde ich aber auch die Z1S1-Notation für die Zelladressen empfehlen.
damit entfällt die Notwendigkeit, die Formel so "zusammenzustückeln":

ActiveSheet.Range("M" & ActiveCell.Row).FormulaR1C1Local = "'=WENN(ZS7-ZS6>0;(ZS7-ZS6)*ZS5;"""")"


dabei steht das Z für Zeile und das S für Spalte.
danach folgt die jeweilige Zeilen- oder Spaltennummer des Bezugs. Folgt nach dem Z oder S keine Nummer, dann heißt das "gleiche Zeile oder Spalte"

eine andere Methode, hier mehr Übersicht reinzubringen ist, dass man den Formeltext zunächst in eine Variable schreibt und dabei für die Teile, die noch variabel sind, einen Dummy-Text einfügt. Dann ersetzt man den Dummy-Text durch den gewünschten Wert:
Vor allem wenn es mal mehrere Werte sind, die in der Formel variabel sein sollen, erhöht das die Übersichtlichkeit
Dim F as String

F = "=WENN(G#-F#>0;(G#-F#)*E#;"""")"
F = Replace(F, "#", ActiveCell.Row
ActiveSheet.Range("M" & ActiveCell.Row).FormulaLocal = F


aber wie oben gezeigt, in den meisten Fällen kommt man ohne das aus, wenn man die Z1S1-Notation verwendet.

Gruß Daniel
Anzeige
AW: Laufzeitfehler 1004
19.03.2025 21:30:11
BigGisY
Ganz ehrlich...

So ein kurzer Code und Ihr habt mich tollen Info und Wissen reicher gemacht.

Vielen Dank!

Forumthreads zu verwandten Themen

Anzeige
Anzeige