Zum Inhalt springen

Rekursiver Funktionsaufruf bei Zellenänderung/EXCEL


Hygrom

Empfohlene Beiträge

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 von Hygrom
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Jimbo0915
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...