Clever-Excel-Forum

Normale Version: Wenn-Funktion per VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Und wieso klappt das hier auf mal nicht mehr?:
If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
If Worksheets("Rech").Range("U43") = 2 Then Worksheets("Namenl").Range("P4") = Worksheets("Rech").Range("P3")

Ich möchte, wenn in Rech.U43 eine 1 steht, dass in Namen.H3 der Wert von Rech.P3 eingetragen wird.
Wenn aber in Rech.U43 stattdessen eine 2 steht, soll in Namen.H3 der Wert von Rech.P3 eingetragen werden.

Doch es geschieht stattdessen folgendes:
Wenn in Rech.U43 eine 1 steht, wird in Namen.H3 der Wert von Rech.P3 eingetragen. (wie gewünscht)
Wenn in Rech.U43 eine 2 steht, wird in Namen.H3 & Namen.P4 der Wert von Rech.P3 eingetragen!

Wenn ich es so mache:
If Worksheets("Rech").Range("U43") = 1 Then Msgbox "Es ist eine 1"
If Worksheets("Rech").Range("U43") = 2 Then Msgbox "Es ist eine 2"
dann zeigt er nur "Es ist eine 2" an, wenn in Rech.U43 eine 2 steht. (anstatt "Es ist eine 1" & "Es ist eine 2" anzuzeigen)
Und auch nur "Es ist eine 1" an, wenn in REch.U43 eine 1 steht.

Wo steckt der Fehler?



#s3gt_translate_tooltip_mini { display: none !important; }
Hallo Julia,

Zitat:Wo steckt der Fehler?

... im Zweifel im Code, denke ich.
Aber den, zumindest den Aktuellen, kennst eigentlich nur Du
Hallo Julia,

Ich weiß ja nicht, ob Du den Code hier reingeschrieben oder aus dem Codefenster rein kopiert hast, aber fällt dir hier was auf?
Zitat:If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
If Worksheets("Rech").Range("U43") = 2 Then Worksheets("Namenl").Range("P4") = Worksheets("Rech").Range("P3")

Ich möchte, wenn in Rech.U43 eine 1 steht, dass in Namen.H3 der Wert von Rech.P3 eingetragen wird.
Wenn aber in Rech.U43 stattdessen eine 2 steht, soll in Namen.H3 der Wert von Rech.P3 eingetragen werden.
oh, danke. Das untere H3 im Text war falsch - im code ist es korrekt. Also nochmal korrigiert:
Und wieso klappt das hier auf mal nicht mehr?:
If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
If Worksheets("Rech").Range("U43") = 2 Then Worksheets("Namen").Range("P4") = Worksheets("Rech").Range("P3")

Ich möchte, wenn in Rech.U43 eine 1 steht, dass in Namen.H3 der Wert von Rech.P3 eingetragen wird.
Wenn aber in Rech.U43 stattdessen eine 2 steht, soll in Namen.P4 der Wert von Rech.P3 eingetragen werden.

Doch es geschieht stattdessen folgendes:
Wenn in Rech.U43 eine 1 steht, wird in Namen.H3 der Wert von Rech.P3 eingetragen. (wie gewünscht)
Wenn in Rech.U43 eine 2 steht, wird in Namen.H3 & Namen.P4 der Wert von Rech.P3 eingetragen! (ich möchte, dass nur in Namen.P4 der Wert von Rech.P3 eingetragen wird. Und nicht auch noch in Namen.H3)

Wenn ich es so mache:
If Worksheets("Rech").Range("U43") = 1 Then Msgbox "Es ist eine 1"
If Worksheets("Rech").Range("U43") = 2 Then Msgbox "Es ist eine 2"
dann zeigt er nur "Es ist eine 2" an, wenn in Rech.U43 eine 2 steht. (anstatt "Es ist eine 1" & "Es ist eine 2" anzuzeigen)
Und auch nur "Es ist eine 1" an, wenn in REch.U43 eine 1 steht.

Die Frage ist also. Warum macht er es im Messagebox-Beispiel richtig & in Codezeile2 zeigt er "Es ist eine 2" an. Aber im 1. Beispiel, wenn die 2. Codezeile ausgeführt wird(weil in Rech.U43 eine 2 steht), wird nicht das gemacht, was dahinter steht. Also: Then Worksheets("Namen").Range("P4") = Worksheets("Rech").Range("P3"). Sondern es wird folgendes gemacht:
1.: Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
2.: Then Worksheets("Namen").Range("P4") = Worksheets("Rech").Range("P3")

Selbst wenn in Rech.U43 eine 3 oder 4 steht usw. wird immer dieses Then ausgeführt: Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
Warum. Die If-Anweisung lautet doch: If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
Also NUR, wenn in Rech.U43 eine 1 steht, soll die Then-Anweisung ausgeführt werden.

Wenn ich eine dritte If-Anweisung schreibe, also ingesamt so:
If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")
If Worksheets("Rech").Range("U43") = 2 Then Worksheets("Namen").Range("P4") = Worksheets("Rech").Range("P3")
If Worksheets("Rech").Range("U43") = 3 Then Worksheets("Namen").Range("W5") = Worksheets("Rech").Range("P3")
dann führt er die 2. und 3. Then-Anweisung aus, wenn eine 2 oder 3 in Rech.U43 steht. Die 1. Then-Anweisung aber nicht nur, wenn dort eine 1 in Rech.U43 steht, sondern immer.
Ich habe auch schon versucht noch eine Zeile über der 1. If-Anweisung zu schreiben "If Worksheets("Rech").Range("U43") = 0 Then Worksheets("Namen").Range("E1") = Worksheets("Rech").Range("P3")". Doch da nützt auch nichts. Den Wert 0 hat Rech.U43 aber auch nie. Ich dachte aber, evlt. führt VBA die 1. Then-Anweisung nach der 1. If-Anweisung immer mit aus. Aber anscheinend nicht.

Auch wenn ich nur die 1. If-Then-Anweisung stehen habe, also: "If Worksheets("Rech").Range("U43") = 1 Then Worksheets("Namen").Range("H3") = Worksheets("Rech").Range("P3")" wird in Namen.H3 immer der Wert aus Rech.P3 eingetragen, wenn ich den Code ausführe. Egal ob in Rech.U43 eine 1, 2, 3, 4, 5, etc. steht.

Oh man - ich habs ^^ Eine alte Testzeile nicht gelöscht - die hatte das stets eingetragen. Dämlich... :16:
Seiten: 1 2