Hygrom Geschrieben 8. Januar 2014 Teilen Geschrieben 8. Januar 2014 (bearbeitet) Folgende Situation: Wenn der Inhalt bestimmter Zellen vom Benutzer manuell geändert wird, wird eine sub aufgerufen, die Werte in anderen Zellen berechnet und anpasst. Geht um Rabattberechnungen. Der Funktionsaufruf für die Änderung eines Zelleninhaltes liegt aber auch auf einigen der Zellen, die automatisch von der Funktion gefüllt werden. Somit verursacht dies eine Endlosschleife, bzw. die Funktion ruft sich immer wieder selbst auf, weil sie Zelleninhalte ändert, die dann wieder diese Funktion aufrufen. Gibt es eine Möglichkeit, zwischen dem manuellen ändern eines Zelleninhaltes durch den Benutzer und einem automatischen Ändern durch die Funktion zu unterscheiden? Oder eine Alternative? Hier ein kurzer Überblick der Situation: es sind folgende Spalten: Position / Anzahl (Auslöser) / Artikelnummer / Artikel / Einzelpreis (Auslöser) / Rabatt (Auslöser) / Gesamtpreis Gibt man z.B. eine Artikelnummer ein, wird automatisch der zugehörige Artikel und Listen-Einzelpreis eingetragen. Ändert man jetzt den Rabatt, wird bei Änderung der Rabatt-Zelle wieder die Funktion aufgerufen und die Einzel- und Gesamtpreise angepasst. Gibt der Benutzer aber einen eigenen Einzelpreis ein, wird der Rabatt auch automatisch berechnet. Da hierbei auch die Zelle mit dem Einzelpreis angepasst wird, löst dies wieder die Funktion aus. Der Auslöser liegt eben auf der Änderung des Zelleninhaltes. die Funktion die auf Änderung prüft ist: Private Sub Worksheet_Change(ByVal Target As Range) Bearbeitet 8. Januar 2014 von Hygrom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jimbo0915 Geschrieben 9. Januar 2014 Teilen Geschrieben 9. Januar 2014 (bearbeitet) Keine Ahnung von VBA, gibt es nicht ein Art "SuppressEvent(var EventType)" Methode oder Worksheet.Events.Event.Enabled Eigenschaft? Ansonsten würde ich folgendes für unschön aber zweckmäßig halten, ist C# solltest wohl aber hinbekommen: Private bool _supressEvents; Public Class() { _supressEvents = false; } Private void Worksheet_Change(Range Target) { If(Target = Anzahl || Target = Rabatt || Target = Einzelpreis) { If (_supressEvents) return; _supressEvents = true; //Do **** here _supressEvents = false; } } LG Tobi Bearbeitet 9. Januar 2014 von Jimbo0915 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.