Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Rekursiver Funktionsaufruf bei Zellenänderung/EXCEL

Empfohlene Antworten

Veröffentlicht

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.