Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
612to616
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
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Textboxänderungen ohne Zirkelbezug programmieren

Textboxänderungen ohne Zirkelbezug programmieren
20.05.2005 12:42:34
Vliegen
Hallo allesamt,
Sitze mal wieder vor einem Problem und brauche Hilfe. Hab auf einer UF verschiedene TBs deren Werte gegenseitig in mathematisch logischen Verhältnissen stehen müssen. Daher habe ich es so eingerichtet dass bei einer Veränderung eines TBs durch den Nutzer alle betroffenen TBs neu berechnet werden. Das bringt aber eine Art von Zirkelbezug auf die UF. Ich glaube das läuft dann eine gewisse Anzahl an Runden oder solange bis eine gewisse Abweichung innerhalb der Rechenläufe unterschritten wurde. Das Resultat ist dann immer eine Sache die fast genau stimmt aber viele Kommastellen hat.
Auf eine Frage im Forum hat mir vor einigen Wochen Nepumuk vorgeschlagen die Sache mit einer Boolean so zu gestalten dass sich der Berechnungen nur dann abspielen wenn die Änderung des Wertes in der TB auch tatsächlich vom User ausgelöst wurde und nicht durch Code. Hab das mal probiert und den untenstehenden Code zusammengestellt. Der läuft ohne die Booleangeschichte ganz gut. Auch mit läuft er aber nicht ganz so wie ich es mir vorstelle denn die erzwungene Eingabe von positiven Zahlwerten funktioniert dann noch nur beim ersten Mal richtig. Versucht der User ein zweites mal einen ungültigen Eintrag dann wird er akzeptiert.
Hab leider zu wenig Erfahrung in VBA und weiss daher nicht wie ich meinen Code umgestalten muss damit alles läuft wie beabsichtigt, sprich Zirkelbezüge vermieden werden, eventuelle Meldungen erscheinen und korrekte Eingaben erzwungen werden.
Freue mich über eure Anregungen und Vorschläge.
Gruss,
Francois
Option Explicite
Private bolAutoChange as Boolean

Private Sub TB1PotChQuatre29_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Um zu vermeidenen dass die TBs sich gegenseitig hochschaukeln wenn der Code des einen Veränderungen beim anderen auslöst
'sprich einen Zirkelbezug vermeiden mit der bolAutoChange Variablen
If Not bolAutoChange Then
bolAutoChange = True
'Um die Eingabe positiver Zahlwerte in die TB zu erzwingen
With Me.TB1PotChQuatre29
If Not IsNumeric(.text) Or _
.Value < 0 Then
MsgBox "Uniquement encoder des chiffres positifs dans ce champs !"
.Value = .BoundValue
.SetFocus
.SelStart = 0
.SelLength = .TextLength
GoTo Errorhandler
Else
Cancel = False
End If
End With
'Um betroffene andere TBs neu zu berechnen wenn Änderung durch den Nutzer erfolgte
With Me
Dim PcMS As Single      'pourcentage de matière sèche dans la matière fraiche
Dim PcMSorg As Single 'pourcentage de matière sèche organique dans la matière sèche
Dim PotMeth As Single  'potentiel méthanogène en litres CH4/ kg MSorg  = m3 CH4/t MSorg
Dim PotGaz As Single  'potentiel de biogaz en m3 gaz/t MF
Dim QualGaz As Single 'qualité du biogaz en % CH4/unité biogaz
PcMSorg = .TB1MSorg21.Value
PcMS = .TB1MS20.Value
PotMeth = .TB1PotChQuatre29.Value
PotGaz = .TB1PotGaz31.Value
QualGaz = .TB1QualGaz30.Value
If .TB1MSorg21.Value = 0 Or .TB1MSorg21.Value = "" Or _
.TB1MS20.Value = 0 Or .TB1MS20.Value = "" Or _
.TB1PotChQuatre29.Value = 0 Or .TB1PotChQuatre29.Value = "" Or _
.TB1QualGaz30.Value = 0 Or .TB1QualGaz30.Value = "" _
Then
MsgBox "Suite à la modification que vous venez d'opérer un calcul correctif des autres paramètres concernés n'a pas pu être réalisé car parmi les données nécessaires à ce calcul au moins une valeur est nulle ou manque.  Vérifier les champs teneur MS, teneur MSorg, potentiel méthanogène, potentiel biogaz, qualité biogaz !", vbExclamation, "Erreur de calcul possible!"
GoTo Ende
Else
.TB1PotGaz31.Value = PotMeth / 100 * PcMSorg / 100 * PcMS / QualGaz * 100
End If
End With
bolAutoChange = False
End If
Ende:
Exit Sub
Errorhandler:
Cancel = True
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Etwas unlesbar daher hier der Text alleine
20.05.2005 12:44:31
Vliegen
Hallo allesamt,
Sitze mal wieder vor einem Problem und brauche Hilfe. Hab auf einer UF verschiedene TBs deren Werte gegenseitig in mathematisch logischen Verhältnissen stehen müssen. Daher habe ich es so eingerichtet dass bei einer Veränderung eines TBs durch den Nutzer alle betroffenen TBs neu berechnet werden. Das bringt aber eine Art von Zirkelbezug auf die UF. Ich glaube das läuft dann eine gewisse Anzahl an Runden oder solange bis eine gewisse Abweichung innerhalb der Rechenläufe unterschritten wurde. Das Resultat ist dann immer eine Sache die fast genau stimmt aber viele Kommastellen hat.
Auf eine Frage im Forum hat mir vor einigen Wochen Nepumuk vorgeschlagen die Sache mit einer Boolean so zu gestalten dass sich der Berechnungen nur dann abspielen wenn die Änderung des Wertes in der TB auch tatsächlich vom User ausgelöst wurde und nicht durch Code. Hab das mal probiert und den untenstehenden Code zusammengestellt. Der läuft ohne die Booleangeschichte ganz gut. Auch mit läuft er aber nicht ganz so wie ich es mir vorstelle denn die erzwungene Eingabe von positiven Zahlwerten funktioniert dann noch nur beim ersten Mal richtig. Versucht der User ein zweites mal einen ungültigen Eintrag dann wird er akzeptiert.
Hab leider zu wenig Erfahrung in VBA und weiss daher nicht wie ich meinen Code umgestalten muss damit alles läuft wie beabsichtigt, sprich Zirkelbezüge vermieden werden, eventuelle Meldungen erscheinen und korrekte Eingaben erzwungen werden.
Freue mich über eure Anregungen und Vorschläge.
Gruss,
Francois
Anzeige
Sorry, Frage natürlich noch offen
20.05.2005 12:47:03
Vliegen
Sorry, Gebe übrigens bald Lehrgänge im "sich selber austricksen".
AW: Sorry, Frage natürlich noch offen
20.05.2005 14:03:54
Bert
Hi,
wenn es in den Errohandler geht, wird die boolsche Variable nicht zurückgesetzt,
also auch dort bolAutoChange = False einbauen.
mfg Bert
Danke Bert
20.05.2005 14:45:40
Vliegen
Hallo Bert !
Vielen Dank für deine wertvolle Hilfe. Werd das mal sofort umsetzen.
Ich wünsche dir noch ein schönes Wochenende.
Gruss,
François

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige