Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert nach Änderung einer Zelle schreiben

Wert nach Änderung einer Zelle schreiben
01.10.2008 18:26:00
Markus
Hallo Leute,
ich werde Excel nie wirklich verstehen. Habe wieder eine Frage: Bei Veränderung des Wertes einer Zelle möchte ich einen Wert in eine andere Zelle schreiben (klingt einfach - gelingt mir nicht!):

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
If Target.Address = Range("Lstg1").Address Then
If Range("Lstg1") = "EnEV NiWo" Or Range("Lstg1") = "EnEV Wohn" Then
'bis hier geht's, danach tritt ein Fehler auf!
Range("A8").Select
ActiveCell.FormulaR1C1 = "Leistungen für EneV 2007 " & Chr(10) & "(Schriftenreihe  _
AHO Nr.23)"
End If
End If
ExitCode:
Exit Sub
ErrorHandler:
MsgBox "Hier passiert Scheiße!"
Resume ExitCode
End Sub


P.S. >Lstg1

30
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert nach Änderung einer Zelle schreiben
01.10.2008 19:46:54
Markus
Also ich habe jetzt etwas genauere Kenntnis: Der Fehler tritt dann auf, wenn auf die Zelle des DropDownfeldes (>Lstg1 Markus
AW: Wert nach Änderung einer Zelle schreiben
01.10.2008 19:49:03
Gerd
Hallo Markus,
so ?
Range("A8").Value = "Leistungen für EneV 2007 " & Chr(10) & "(Schriftenreihe _
AHO Nr.23)"
Gruß Gerd
AW: Wert nach Änderung einer Zelle schreiben
01.10.2008 20:28:44
Erich
Hi Markus,
probier mal

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrorHandler
If Target.Address = Range("Lstg1").Address Then
If Target = "EnEV NiWo" Or Target = "EnEV Wohn" Then
Application.EnableEvents = False
Range("A8") = "Leistungen für EneV 2007 " & Chr(10) & _
"(Schriftenreihe AHO Nr.23)"
Application.EnableEvents = True
End If
End If
ExitCode:
Exit Sub
ErrorHandler:
MsgBox "Hier passiert Scheiße!"
Resume ExitCode
End Sub
' ODER:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("Lstg1").Address Then
If Target = "EnEV NiWo" Or Target = "EnEV Wohn" Then
Application.EnableEvents = False
Range("A8") = "Leistungen für EneV 2007 " & Chr(10) & _
"(Schriftenreihe AHO Nr.23)"
Application.EnableEvents = True
End If
End If
End Sub

Noch ein paar Bemerkungen:
Wenn du Range("A8") änderst, erzeugst du damit ein Worksheet_Change-Ereignis.
Und dann soll deine Prozedur laufen - die ja gerade schon läuft.
Deshalb "Application.EnableEvents = False".
Range("Lstg1") = "EnEV NiWo" geht kürzer mit Target = "EnEV NiWo".
Range("A8").Select ist überflüssig, eventuell auch schädlich.
Warum .FormulaR1C1 = "..."? Du willst doch gar keine Formel schreiben, nur den Value ändern:
Range("A8").Value = "..." oder kürzer
Range("A8") = "..."
Braucht man hier wirklich ein Error Handling?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Wert nach Änderung einer Zelle schreiben
01.10.2008 21:17:00
Markus
Hi Erich,
ich glaube Dein Ansatz, zunächst weitergehende Aktivitäten zu unterbinden, ist der Richtige. Leider funktioniert es dennoch zur Zeit nicht. Sobald eine fremde Zelle auf >Target Vielen Dank für Deine ausführlichen Ausführungen.
Gruß Markus
AW: Wert nach Änderung einer Zelle schreiben
01.10.2008 22:42:30
Markus
Excel steigt in der Zeile aus, wo es den Wert in die fremde Zelle schreiben will. Auch durch das Unterbinden laufender Ereignisse wird das nicht besser:
'Worksheets(1).EnableCalculation = False
'Application.EnableEvents = False
'Application.Calculation = xlManual
Hat jemand eine Idee, wo man da noch ansetzen könnte?
Gruß Markus
Anzeige
AW: Wert nach Änderung einer Zelle schreiben
02.10.2008 00:22:30
Erich
Hi Markus,
wenn du das Makro ohne Error Handling laufen lässt, teilt VBA dir Fehlernummer und Fehlertext mit.
Wie lauten die? (Diese Infos sind immer ganz praktisch, wenn man über Fehler redet...)
Und tritt der Fehler tatsächlich in der Zeile Range("A8") = "Leistungen für ..." auf?
Noch eine Frage: Wie ist der Name Lstg1 definiert, auf welchen Bereich bezieht er sich?
Noch eine Frage. Du hast vorhin etwas geschrieben, das ich nicht verstehe:
"Der Fehler tritt dann auf, wenn auf die Zelle des DropDownfeldes (>Lstg1<) eine andere Zelle zugreift,
ist die nicht wird die Funktion ordnungsgemäß ausgeführt"
Was ist die Zelle eines DropDown-Feldes, wie greift eine andere Zelle darauf zu?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wert nach Änderung einer Zelle schreiben
02.10.2008 13:07:33
Markus
Hallo Erich,
zu Deiner Erläuterung:
1. ich habe den ErrorHandler ausgeschaltet, aber es gibt keine Fehlermeldung (Excel verhält sich so wie bei >Error Resume Next 2. Der Name >Lstg1 3. >Lstg1Lstg1Lstg1Lstg1 - das ist mein Dilemma -
Schon mal Danke für Deine Mühen, Gruß Markus
AW: Wert nach Änderung einer Zelle schreiben
02.10.2008 15:45:00
Erich
Hi Markus,
wenn es keine Fehlermeldung gibt, gibt es auch keinen Fehler - und einen anderen Grund,
nichts in A8 zu schreiben.
Gibt es andere Ereignisprozeduren, z. B. zum Calculate-Ereignis, in der Tabelle?
Ich hab das mal nachgebaut. Hier läuft das Ganze problemlos: https://www.herber.de/bbs/user/55787.xls
(Und ich habe auch Excel XP.)
Wenn es in deiner Mappe nicht funzt, poste doch bitte mal eine Kurzfassung der Mappe.
Vielleicht kann man da etwas erkennen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wert nach Änderung einer Zelle schreiben
02.10.2008 22:02:10
Markus
Erich, dank Dir für Deine Bemühungen.
Ich poste mal mein Worksheet (https://www.herber.de/bbs/user/55798.xls). Wenn Du im Feld >LstgLstg.Hon(Lstg;5000000;"III / Mitte") Ich hoffe ich habe mich einigermaßen verständlich gemacht. Gruß Markus
AW: Wert nach Änderung einer Zelle schreiben
03.10.2008 13:44:00
Erich
Hi Markus,
inzwischen vermute ich, dass dein Problem im Zusammenhang mit der Funktion Hon(...) steht.
In der Mappe hab ich mal eine andere Funktion eingebaut - das funzt ohne Probleme:
https://www.herber.de/bbs/user/55800.xls
Was beim Hon()-Aufruf schief geht, kann ich nicht sagen. Ich habe nichts kritisches gefunden.
Der Effekt ist jedenfalls, dass das Eventhandling ausgeschaltet wird/bleibt.
(Im Direktfenster kannst du das durch Eingabe von "Application.EnableEvents=true" reparieren.)
Vielleicht hast du dir in der Mappe einmal etwas zerschossen - wodurch auch immer.
Dann hilft nur, die Mappe neu aufzubauen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wert nach Änderung einer Zelle schreiben
03.10.2008 14:02:28
Markus
Hi Erich,
dank Dir für den Tipp, ich muss mir das mal in Ruhe zu Gemüte führen und melde mich dann wieder.
Gruß Markus
AW: Wert nach Änderung einer Zelle schreiben
03.10.2008 14:30:00
Markus
Hallo Erich,
ich glaube da ist ein Fehler passiert. Deine Funktion >fctTestLstg Gruß Markus übrigens aus Köln
VBA-Problem Change-Event/UDF/Gültigkeit
03.10.2008 19:19:58
Erich
Hi Markus,
stimmt, da hatte ich die Bedingungen leicht verfälscht - und schon klappt es.
Bei weiteren Versuchen, das weiter zu analysieren, habe ich keine Erklärung gefunden.
Irgendwie kommt VBA wohl nicht klar mit den Events.
Um den Fehler zu produzieren, müssen drei Dinge zusammenkommen:
- Eingabe in B5 mittels Gültigkeits-Dropdown
- Auswertung von B5 in einer UDF
- Belegung einer anderen Zelle im Change-Ereignis
In dieser Mappe habe ich das versucht, das Ganze möglichst elementar darzustellen:
https://www.herber.de/bbs/user/55808.xls
Ich stelle den Thread auf "offen" - und hoffe auf einen der VBA-Cracks hier...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
einmal versuche ich es
04.10.2008 08:27:00
Tino
Hallo,
habe mal in Deinem Code aus der Datei etwas rumgebastelt.
Vielleicht geht es ja so, habe aber auch Office 2003?
https://www.herber.de/bbs/user/55810.xls
Gruß Tino
VBA-Problem Change-Event/UDF/Gültigkeit
04.10.2008 10:27:06
Erich
Hi Tino,
durch deine Änderung(en) wird das Problem leider nicht beseitigt.
Hier eine neue Version der Beispielmappe: https://www.herber.de/bbs/user/55812.xls
Ich stelle den Thread wiederf auf "offen" - und hoffe weiter auf einen der VBA-Cracks hier...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: VBA-Problem Change-Event/UDF/Gültigkeit
04.10.2008 10:57:00
Tino
Hallo,
dann sollte die Berechnung in dieser Tabelle grundsätzlich auf Manuell stehen und durch dass Change Event auf automatische Berechnung und wieder zurück gestellt werden.
Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = "$B$5" Then
      Application.EnableEvents = False
        Range("B7") = String(5, Target) & " OK"
      Application.EnableEvents = True
      End If
Application.Calculation = xlCalculationAutomatic
Application.Calculation = xlCalculationManual
End Sub


Gruß Tino

Anzeige
Mit Hilfszelle
04.10.2008 11:22:00
Tino
Hallo,
am effektivsten scheint es mir aber mit einer Hilfszelle zu arbeiten,
damit die Funktion nicht vor dem Event aufgerufen wird.
https://www.herber.de/bbs/user/55813.xls
Gruß Tino
AW: Mit Hilfszelle
04.10.2008 13:05:18
Erich
Hi Tino,
ja, auch der "Würgaround" funzt, wie manch anderer auch - aber das ist kein Wunder.
Ich hatte geschrieben:

Der obige Fehler tritt auch dann nicht auf, wenn der Parameter der UDF nicht von B5 abhängt.
Um den Fehler zu produzieren, müssen drei Dinge zusammenkommen:
- Eingabe in B5 mittels Gültigkeits-Dropdown
- Auswertung von B5 in einer UDF
- Belegung einer anderen Zelle im Change-Ereignis

Die zweite Bedingung ist bei diesem Würgaround (ein wirklich schöner Begriff!) nicht erfüllt.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Mit Hilfszelle
04.10.2008 13:34:32
Tino
Hallo,
habe Dein Würgaround nicht durchgelesen,
bin eher durch das Verhalten bei diesem Beitrag(Test) drauf gekommen.
https://www.herber.de/forum/messages/1014125.html
Habe nur die eine Erklärung für dieses verhalten.
Weil eine Funktion nicht seine Umgebung verändern kann und die Funktion einmal vor dem Event ausgeführt wird und ein weiteres mal, durch das Event selbst und das ganze wird der Funktion zugeschustert.
Eine Hilfszelle scheint für mich aber die beste Lösung für dieses Problem zu sein.
Gruß Tino
AW: Mit Hilfszelle
04.10.2008 14:07:43
Erich
Hi Tino,
das mit der Hilfszelle sehe ich auch so - das ist ein gangbarer Weg zur Umgehung des Problems.
Eine Erklärung habe ich auch in deinem Beitrag nicht gefunden:
"Weil eine Funktion nicht seine Umgebung verändern kann"
--- Das soll und will sie ja auch nicht.
"die Funktion einmal vor dem Event ausgeführt wird und ein weiteres mal, durch das Event selbst"
--- Das habe ich auch so beobachtet.
"das ganze wird der Funktion zugeschustert."
--- Was meinst du denn damit?
Warum z. B. tritt der Fehler nicht auf, wenn man (ohne Auswahl aus dem DropDown) einen Wert in B5 tippt?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Mit Hilfszelle
04.10.2008 14:22:23
Tino
Hallo,
die Funktion wird doch ausgeführt und danach erst das Event, somit wird wahrscheinlich
der Funktion auch die Aktion aus dem Event in die Schuhe geschoben.
Zumindest kann ich mir dies nicht anders erklären.
Gruß Tino
AW: Wert nach Änderung einer Zelle schreiben
04.10.2008 11:39:00
Gerd
Hi Erich,
wenn "der Fehler" das Ausbleiben des Worksheet_Change-Ereignisses bei Wiederholung der Auswahl in der Gültigkeitsliste sein soll,
dann tritt dieser bei mir in xl2000 mit deiner Beispieldatei nicht auf.
Gruß Gerd
AW: Wert nach Änderung einer Zelle schreiben
04.10.2008 13:15:58
Erich
Hi Gerd,
mit dem "Fehler" ist gemeint:
(bezieht sich auf dei Beispielmappe https://www.herber.de/bbs/user/55812.xls
die ich in https://www.herber.de/forum/messages/1014120.html hochgeladen habe.)
Worksheet_Change steigt (ohne Fehlermeldung) aus, bevor sie den Wert der Zelle B5 ändert.
Um den Fehler zu produzieren, müssen drei Dinge zusammenkommen:
- Eingabe in B5 mittels Gültigkeits-Dropdown
- Auswertung von B5 in einer UDF
- Belegung einer anderen Zelle im Change-Ereignis
Schreib mal xyz in B7 und wähl dann im Dropdown einen Wert aus.
Dann sollte B7 neu belegt werden.
Bei mir bleibt xyz in B7 stehen, und danach ist EnableEvents = False.
Ist das bei dir anders?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Wert nach Änderung einer Zelle schreiben
04.10.2008 14:48:14
Gerd
Hi Erich !
Schreib mal xyz in B7 und wähl dann im Dropdown einen Wert aus.
Dann sollte B7 neu belegt werden.
Bei mir bleibt xyz in B7 stehen, und danach ist EnableEvents = False.
Bei mir steht dann in B7 "ccccc Ok", die Sub Events_ein liefert ""Events waren schon aktiv"
Wie gesagt, habe (nur) xl2000 u. in deiner Beispielmappe 55812.xls nichts geändert.
Gruß Gerd
AW: Wert nach Änderung einer Zelle schreiben
05.10.2008 11:56:27
Erich
Hi Gerd,
tja, dann haben wir das Problem erst mal nur in xl10 und xl11 (2002 und 2003) lokalisiert.
Danke für deinen Test in xl2000!
Ich hab dazu gerade einen neuen Beitrag aufgemacht: https://www.herber.de/forum/messages/1014215.html
Sonntagsgrüße von Erich aus Kamp-Lintfort
AW: Wert nach Änderung einer Zelle schreiben
05.10.2008 12:09:11
Tino
Hallo,
die Version 12 (2007) kannst Du auch in dieser Gruppe mit aufnehmen.
Gruß Tino
AW: Wert nach Änderung einer Zelle schreiben
05.10.2008 12:25:00
Markus
Hi Leute,
ich weiß Euren Einsatz für meinen Thread sehr zu schätzen, aber es scheint ja offensichtlich auch den Gelehrten einige Fragen aufzugeben. Muss ich das jetzt unter die Rubrik "Bug in Excel" abbuchen?
Der "Killer" scheint ja offensichtlich die Kombination mit dem DropdownFeld zu sein.
Gruß Markus
AW: Wert nach Änderung einer Zelle schreiben
05.10.2008 12:37:18
Tino
Hallo Markus,
kannst Dir ja auch xl2000 zulegen, sollte dies in 2000 wirklich funktionieren. ;-)
Gruß Tino
AW: Wert nach Änderung einer Zelle schreiben
05.10.2008 13:28:09
Markus
"Kommt ein Typ in die Werkstatt und sagt er habe an seinen VW ein Problem mit dem Scheibenwischer, sagt der Mechaniker: Kauf Dir doch einen Mercedes, da geht der Wischer!"
Haste klasse gemacht!
ja genau. ;-)
05.10.2008 13:30:48
Tino

381 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige