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

ElseIf Abfrage und Wert in Zelle schreiben

Forumthread: ElseIf Abfrage und Wert in Zelle schreiben

ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 10:13:40
Jochi-W
Guten Morgen,

ich habe ein Problem mit einer ElseIf Abfrage die mir einen Wert in eine Zelle schreiben soll. Anbei mein Code:



Private Sub Worksheet_Change(ByVal Target As Range)

If [b10].Value = "bosch" Then
Range("B1").Value = "adresse1"
Range("B2").Value = "adresse2"
ElseIf
[b10].Value = "siemens" Then
Range("B1").Value = "adresse3"
Range("B2").Value = "adresse4"
Else Range("B2").Value = "ZF"
End If

End Sub


Wenn in Zelle B10 ein Firmenname erscheint soll in Zelle B1 und B2 die Adresse geschrieben werden. Eigentlich nichts besonderes. Das ganze soll durchlaufen sobald eine Änderung in der Excel Tabelle durchgeführt wird. Sobald eine Bedingung zutrifft stürzt mein Excel nach ausführen des Codes ab. Ab und zu schreibt er die Werte in die Zelle und stürzt dann ab. Die Firmennamen sind hier nur Platzhalter...

Hat jemand eine Idee warum bzw. wo das Problem liegt?

Vielen Dank und schönes Wochenende
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 10:28:25
Yal
Hallo Jochi,

"bei jede Änderung", es bedeutet, dass wenn Du durch diese Prozedur etwas reinschreibe, diese Prozedure gerufen wird. Endlos. Bis Absturz.
Die Lösung besteht daran, die Ereignis-Reaktionsfähigkeit kurzzeitig auszuschalten:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
Select Case LCase(Range("B10").Value)
Case "bosch"
Range("B1").Value = "adresse1"
Range("B2").Value = "adresse2"
Case "siemens"
Range("B1").Value = "adresse3"
Range("B2").Value = "adresse4"
Case Else
Range("B2").Value = "ZF"
End Select
Application.EnableEvents = True
End Sub

(Achte auf ein sauberen Einrücken. Gute Lesbarkeit macht im Voraus viele Fehler sichtbar)

VG
Yal
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 10:33:43
MCO
Moin!

Bei CHANGE-Ereignissen schlägt die Prozedur ja jedesmal zu, wenn sich was ändert, also auch, wenn die Prozedur was ändert.
Also muss man das abschalten mit

Application.EnableEvents = false und mit Application.EnableEvents = True wieder einschalten am Ende

Außerdem willst du ja auch nur das Ereignis ausläsen wenn in B10 was geändert wird, daher prüf ich auch die Adresse noch.

Das säh dann so aus:
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address(0, 0) > "B10" Then Exit Sub
Application.EnableEvents = False

If [b10].Value = "bosch" Then
Range("B1").Value = "adresse1"
Range("B2").Value = "adresse2"
ElseIf [b10].Value = "siemens" Then
Range("B1").Value = "adresse3"
Range("B2").Value = "adresse4"
Else
Range("B2").Value = "ZF"
End If

Application.EnableEvents = True

End Sub


Allerdings fänd ich das bei solchen Bedingungen schicker, wenn es über eine Select case-Anweisung geregelt wäre. Ist auch einfacher zu lesen:


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(0, 0) > "B10" Then Exit Sub
Application.EnableEvents = False

Select Case Target.Value
Case "bosch"
Range("B1").Value = "adresse1"
Range("B2").Value = "adresse2"
Case "siemens"
Range("B1").Value = "adresse3"
Range("B2").Value = "adresse4"
Case Else
Range("B2").Value = "ZF"
End Select
Application.EnableEvents = True

End Sub


Viel Erfolg!
Gruß, MCO
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 10:53:04
Jochi-W
Vielen Dank für eure schnellen Antworten Yal und MCO,

Select Case hatte ich auch schon im Kopf. Ich dachte am Ende müsste beides gehen, hab es jetzt auf Select Case geändert.
Keine Abstürze mehr :), jedoch schreibt er nichts weg.
Ich hab beide Lösungen von MCO probiert. Einmal mit dem Abgleich ob in B10 etwas geändert wird oder nicht. Ich habe den Code von hier rüberkopiert.

Ich habe in B10 den Wert von bosch in siemens und zurück geändert. In beiden Fällen sollte er was wegschreiben. Das macht er leider nicht.

Gruß
Jochi
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 12:22:35
Jochi-W
Entschuldigung, bin neu.

Zum Testen mach ich immer neue Dateien, bevor ich meine Original Datei zerstöre.

https://www.herber.de/bbs/user/174905.xlsm
AW: ElseIf Abfrage und Wert in Zelle schreiben
20.01.2025 11:09:15
GerdL
Moin Joschi,

in deiner hier hochgeladenen Testdatei wird B10 mit eine Formel aus D11 gefüllt.
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address(0, 0) > "D11" Then Exit Sub
Application.EnableEvents = False

Select Case LCase(Range("B10"))
Case "bosch"
Range("b1").Value = "adresse1"
Range("b2").Value = "adresse2"
Case "siemens"
Range("b1").Value = "adresse3"
Range("b2").Value = "adresse4"
Case Else
Range("b2").Value = "ZF"
End Select
Application.EnableEvents = True


End Sub



Gruß Gerd
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
17.01.2025 13:43:57
Yal
Hallo Jochi,

könnte es sein, dass diese Datei bei Dir in einem "nicht vertrauenswürdigen" Verzeichnis abgelegt ist und damit die Makros ausgeschaltet sind? Sonst funktioniert wie es soll (bei mir).

Wenn in B10 eine Formel steht, musst Du die Prüfung im Change auf dem entsprechende Quell-Bereich einschränken. Alternativ: nicht einschränken, aber dann läuft das Makro immer komplett durch (nur minimal störend).

VG
Yal
Anzeige
AW: ElseIf Abfrage und Wert in Zelle schreiben
20.01.2025 08:18:36
Jochi-W
Guten Morgen Yal,
eigentlich nicht. Meine Testdatei lag bei mir auf D:.
Ich habe die Datei in ein anderen Verzeichnis und einmal auf unseren Server verschoben. Auf dem Server kam die Meldung wegen der "Vertrauenswürdigkeit" diese habe ich bestätigt, aber ging in allen Fällen nicht.

Ich probiere es mal weiter oder mal zu Testzwecken mit "If Abfragen"

Dennoch vielen Dank für eure Hilfe
Gruß
Jochi
Anzeige
Fehlersuche: TESTEN
17.01.2025 11:39:12
MCO
Hey,

das hört sich so an, als wenn die Ereignisse schon abgeschaltet sind.
Geh mal in den direktbereich (STRG+g) und frage das ab:
? Application.enableevents


Das sollte TRUE oder WAHR stehen.

Du kannst es natürlich auch sofort auf True stellen:
Application.enableevents = True


Dann setzt einen Haltepunkt auf die Select Case-Zeile (vorn klicken: roterbrauner Punkt) und ändere den Zellinhalt von B10
Jetzt sollte der Code bis zum Haltepunkt laufen, weitertesten mit F8

Gruß, MCO
Anzeige
AW: Fehlersuche: TESTEN
17.01.2025 12:10:31
Jochi-W
Hallo MCO,

die Events stehen auf "Wahr" sind also eingeschaltet.
Wenn ich die Programmzeile vor "Select case"auf auf "True" ändere stürzt das Excel wieder ab. Also wieder zurück auf "False" geändert.

Den Haltepunkt habe ich eingefügt. Er hält auch an, ich kann mit F8 weiterklicken, er läuft durch und macht gar nichts.
B10 habe ich direkt geändert, und habe es per Formel auf eine andere Zelle verwiesen und diese geändert. Klappt nicht.

Ich kann auch meine Test Excel Liste hochladen, falls das hilft.
Vielen Dank schon für die Hilfe.

Jochi
Anzeige
Ja, dann lad mal hoch...
17.01.2025 12:18:48
MCO
... die Idee hättest du auch schon eher haben können :-)
AW: Fehlersuche: TESTEN
17.01.2025 12:22:35
BoskoBiati2
Hi,

1. vor Select Case das: Application.EnableEvents = False
2. Dann diese Sub erstellen:
Sub Einschalten()

Application.EnableEvents = true
End Sub

3. Vor dem Ändern der Datei Einschalten laufen lassen (STRG+ALT+F8)

Danach nochmal testen.

Gruß

Edgar
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18