Exel VBA Berechnung im Userform/Textfeld?

2 Antworten

 txtKohlenhydrate1.Value = CDbl(txtKohlenhydrate1) * CDbl(txtMenge1) / 100

tut folgendes:

Der Inhalt von txtKohlenhydrate1 wird ausgewertet

Der Inhalt von txtMenge1 wird ausgewertet

Hieraus wird das Produkt gebildet und dies durch 100 geteilt

Das Ergebnis wird wieder in txtKohlenhydrate1 geschrieben

Wenn dieselbe Funktion noch mal ausgeführt wird, wird der jetzt aktuelle Wert von txtKohlenhydrate1 genommen, nicht der originale Wert

Du könntest auf das LostFocus- Ereignis reagieren, aber dann
sind nachträgliche Korrekturen in txtKohlenhydrate1 auch nicht mehr so
ohne weiteres möglich.

Aber das Problem dürfte am einfachsten und besten zu umgehen sein, indem du ein eigenes Textfeld für txtKohlenhydratePro100g einführst und dann

 txtKohlenhydrate1.Value = CDbl(txtKohlenhydratePro100g) * CDbl(txtMenge1) / 100

Das hat außerdem den Vorteil, dass du auch sofort auf Änderungen in txtKohlenhydratePro100g reagieren kannst.


Ahcas 
Beitragsersteller
 19.04.2017, 16:03

Hallo

Erst mal Danke für deine Antwort. Mein Problem ist, wenn ich das so machen würde, hätte ich auf meinem UserForm später das doppelte an Textfeldern.

Ich erkläre mal kurz was ich vor habe. Ich bin dabei, mir ein Art Ernährungsplan zu erstellen.

Unter anderem habe ich erstens, eine weitere Eingabemaske (Userform) mit der ich Lebenmittel mit Angaben zu den Nährwerten in eine Tabelle (Lebensmitteltabelle) eintragen kann.

Um das Userform, um das es geht soll jetzt folgendes passieren.

Als erstes kann man die Lebensmittel aus Lebensmitteltabelle per DropDawn auswählen und es werden dann automatisch die Nährwerte mit ins Userform übernommen.

Insgesamt gibt es 6 Reihen die wie folgt aussehen

Lebensmittel1 - Kategorie1 -  Menge1 - Kohlenhydrate1 - Fett1 - Eiweiß1 - Ballastoffe1 - Kalorien1

Lebensmittel2 - Kategorie2 -  Menge2 - Kohlenhydrate2 - Fett2 - Eiweiß2 - Ballastoffe2 - Kalorien2

usw. bis 6

Dann kommt eine weitere Reihe wo die gesamten Nähewerte zusammen gerechnet werden sollen.

GESAMT - Menge7 - Kohlenhydrate7 - Fett7 - Eiweiß7 - Ballastoffe7 - Kalorien7

Und jetzt kommt noch eine Reihe in der man jetzt aus den 6 ausgewählten Lebenmittel ein Rezept erstellen kann.Es soll ein Rezeptname in ein Textfeld geschrieben werden und das dann auf 100g automatisch berechnet werden.

Rezeptname - Kategorie8 -  Menge8 - Kohlenhydrate8 - Fett8 - Eiweiß8 - Ballastoffe8 - Kalorien8

Danach soll durch klicken eines Buttons, der gesamte Inhalt vom Userform in eine Tabelle (Rezepttabelle) einfügt werden.(Damit man auch nach einem halben Jahr noch nachvollziehen kann, woraus das Rezept ursprünglich bestand).Und nur das Rezept (letzte Reihe des Userform) mit Namen und Nährwerten soll dann in die Lebensmitteltabelle einfügt werden.

Die Lebenmittel soll man später in einer weiteren Tabelle als DropDawn auswählen können.

Und jetzt glaube ich sieht man auch wo rauf das hinauslaufen würde. Das Userform wurde dann doppelt so groß werden und auch unübersichtlicher.Deswegen wäre es schön, sobald man die Menge ändert, dass automatisch die Daten geändert werden, aber von den Ursprungswerten aus gesehen. Bin mir nur nicht sicher ob dieses in dieser Form mit Excel überhaupt möglich ist.

Danke im Vorraus und ich hoffe man versteht jetzt, worauf ich hinaus möchte.

0
PWolff  19.04.2017, 17:56
@Ahcas

Dafür wäre eine Verweistabelle sinnvoller. Ich dachte, es wäre eine Übung zum Thema UserForms und DropDown-Listen.

Wenn du keine Verweistabelle haben willst, kannst du die Werte für 100 g je Lebensmittel auch in eine eigene Datei auslagern, am einfachsten Excel - dann kannst du mit Excel-Funktionen darauf zugreifen -, ansonsten eine Textdatei o. ä., die du mit der UserForm einlesen kannst.

Natürlich ist auch das programmgesteuerte Ändern eines vorher eingetragenen Wertes möglich - am besten, wenn das Eingabefeld verlassen wird, also im LostFocus- oder (besser) Validate-Ereignis -, aber wenn es sich um Stammdaten handelt, widerspricht das meiner Auffassung von Benutzerfreundlichkeit so sehr, dass ich es einfach nicht empfehlen kann.

0

sowas macht man mit einer Verweistabelle, nicht mit Makros.

Such Dir zum Lernen ein besseres Beispiel, wo Makros nötig sind (ich gebe zu, sinnvolle einfache sind durch den gewachsenen Umfang der Fähigkeiten von xl stark geschrumpft, meine frühen Makros sind von xl größtenteils überholt worden)