Wenn-Funktion per VBA
#11
Question 
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; }
Top
#12
Hallo Julia,

Zitat:Wo steckt der Fehler?

... im Zweifel im Code, denke ich.
Aber den, zumindest den Aktuellen, kennst eigentlich nur Du
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • o0Julia0o
Top
#13
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.
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • o0Julia0o
Top
#14
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:
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste