Zum Inhalt springen

Rekursiver Funktionsaufruf bei Zellenänderung/EXCEL


Empfohlene Beiträge

Geschrieben (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 von Hygrom
Geschrieben (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 von Jimbo0915

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...