sunny1989 Geschrieben 20. April 2010 Geschrieben 20. April 2010 (bearbeitet) Hallo, ich möchte mit VBA einen Kalorienverbrauchsrechner erstellen. Leider sind dort einige Fehler da es nicht funktioniert, könntet ihr mir bitte Tipps geben, woran es liegen könnte? als 1. wird gnach den Daten gefragt, also welches Geschlecht, Größe, Alter usw. 2. hier soll es an bestimmte bedingungen geknüpft werden, also der Durchschnittsmensch ist ja keine 3 m groß... deswegen sollte eigentlich dann das Programm abrechen wenn man merkwürdige Zahlen eingibt... mein Problem macht es aber nicht... 3. hier ist die eigentliche Berechnung des Grundumsatzes, die führt er aber nicht aus, warum nicht? 4. da ja der Mensch sich auch bewegt kommt ja noch die körperliche Aktivität hinzu, d.h. die Formel würde dann noch später mit einem wert multipliziert werden bspw. keine Bewegung (×1), ausschließlich sitzend/liegend (×1.2),... , körperlich anstrengende Arbeit (×2.2) -> insgesamt 6 Werte... wie kann ich diese dann noch einfügen? so sieht bisher mein Versuch aus: Sub kalorienverbrauch() Dim groesse As Single Dim gewicht As Single Dim alter As Single Dim geschlecht As Variant Dim kalorienumsatzfrauen As Single Dim kalorienumsatzmaenner As Single geschlecht = InputBox(" Bitte gib dein Geschlecht ein, wenn du weiblich bist ein m und wenn du männlich bist dann ein w", "Eingabefeld", " w für weiblich, m für männlich") [COLOR="Cyan"]kann man hier es ´sich nicht irgendwie einfacher machen?[/COLOR] groesse = InputBox("Bitte gib deine Groesse in m ein", "Eingabefeld", "Deine Eingabe") alter = InputBox("Bitte gib dein Alter ein", "Eingabefeld", "Deine Eingabe") gewicht = InputBox("Und jetzt gib dein Gewicht ein", "Eingabefeld", "Deine Eingabe") If (groesse < 1.5) Then strText = " wichtig !!!" MsgBox ("Bitte eine Größe über 1,50m angeben") End If If (groesse > 2.5) Then MsgBox ("Bitte eine Größe unter 2,50m angeben") End If If (gewicht < 45 And gewicht) Then MsgBox ("Bitte ein Gewicht über 45kg angeben") End If If (gewicht > 200) Then MsgBox ("Bitte ein Gewicht unter 200kg angeben") End If If (geschlecht = w) Then kalorienumsatzfrauen = 655.1 + 9.6 * gewicht + 1.8 * groesse - 4.7 * alter ElseIf (geschlecht = m) Then kalorienumsatzmaenner = 66.47 + 13.7 * gewicht + 5 * groesse - 6.8 * alter End If End Sub Ich hoffe es war verständlich geschrieben (denn es ist meine erste Frage) und ich würde mich über jede leicht verständliche Hilfe freuen Bearbeitet 20. April 2010 von grueni Zitieren
lupo49 Geschrieben 20. April 2010 Geschrieben 20. April 2010 Hallo, Guten Tag 2. hier soll es an bestimmte bedingungen geknüpft werden, also der Durchschnittsmensch ist ja keine 3 m groß... deswegen sollte eigentlich dann das Programm abrechen wenn man merkwürdige Zahlen eingibt... mein Problem macht es aber nicht... Du hast keine Programmabbruchbedingungen in deinem Quelltext. D.h. die "IF Größe < 1.5"-Abfrage ist zwar "wahr", aber dann wird das Programm weiter sequentiell abgearbeitet. Du könntest bspw. folgendes einbauen If (groesse < 1.5) Then strText = " wichtig !!!" MsgBox ("Bitte eine Größe über 1,50m angeben") Exit Sub End If 3. hier ist die eigentliche Berechnung des Grundumsatzes, die führt er aber nicht aus, warum nicht? Weil du in deiner IF-Abfrage auf Gleichheit zweier Variablen überprüfst (ist die Variable Geschlecht gleich dem Inhalt der Variable m bzw. w). Die Zeichen m und w müssen in Hochkommata. If (geschlecht = "w") Then ... Bei den Berechnungen würde ich dir empfehlen entsprechende Klammern zu setzen. Zitieren
MartinSt Geschrieben 20. April 2010 Geschrieben 20. April 2010 geschlecht = InputBox(" Bitte gib dein Geschlecht ein, wenn du weiblich bist ein m und wenn du männlich bist dann ein w", "Eingabefeld", " w für weiblich, m für männlich") kann man hier es ´sich nicht irgendwie einfacher machen? Der Kommentar "kann man hier .." muß mit Hochkomma eingeleitet werden und außerdem ist die Inputbox falsch herum fomuliert. Warum benutzt du ein Variant für das Geschlecht? Zitieren
sunny1989 Geschrieben 20. April 2010 Autor Geschrieben 20. April 2010 (bearbeitet) Hallo, erstmal vielen lieben Dank für die schnellen Antworten, wusste gar nicht das das so schnell geht also ich nutze variant, weil bei single macht er das nicht und variant da nimmt er doch alles, hab ich jedenfalls so verstanden... gibt es denn eine bessere Möglichkeit? ich würds ja auch besser finden wenn es zum beispiel schon vorgegeben wäre, weiß aber leider nicht wie man das macht... also ein feld, indem man es auswählt ob derjenige männlich oder weiblich ist... wie macht man denn das mit dem letzten Punkt, also das man verschiedene körperliche Aktivitäten auswählt? es gibt ja 6 Möglichkeiten von nixtun bis harte körperliche Arbeit wie kann ich dies in die Formel mit einbauen? weil das muss ja auch beachtet werden... man hat ja nicht nur den Grundumsatz ... *dann könnte man nix mehr essen* also, das man nicht jedesmal nochmal die formel ändert... sondern das gleich in einer formel rüberbringt Bearbeitet 20. April 2010 von sunny1989 Zitieren
sunny1989 Geschrieben 20. April 2010 Autor Geschrieben 20. April 2010 Sub allgemeinerkalorienverbrauch() Dim groesse As Currency Dim gewicht As Currency Dim alter As Integer Dim geschlecht As Variant Dim kalorienumsatzfrauen As Currency Dim kalorienumsatzmaenner As Currency Dim koerperlicheaktivi As Integer geschlecht = InputBox(" Bitte gib dein Geschlecht ein: " & vbCr & "w für weiblich" & vbCr & "m für männlich", "Eingabefeld", " w für weiblich, m für männlich") groesse = InputBox("Bitte gib deine Groesse in m ein", "Eingabefeld", "Deine Eingabe") alter = InputBox("Bitte gib dein Alter ein", "Eingabefeld", "Deine Eingabe") gewicht = InputBox("Und jetzt gib dein Gewicht ein", "Eingabefeld", "Deine Eingabe") koerperlicheaktivi = InputBox(" Bitte gib jetzt den Grad deiner körperlichen Aktivität ein: " & vbCr & "1 = keine Bewegung" & vbCr & "2 = ausschließlich sitzend/liegend" & vbCr & "3 = sitzend, kaum körperliche Aktivität" & vbCr & "4 = sitzend, zeitweilig gehend/ stehend" & vbCr & "5 = überwiegend stehend/gehend" & vbCr & "6 = körperlich anstrengende Arbeit ", "Eingabefeld", "deine Zahl") If (groesse < 1.5) Then strText = " wichtig !!!" MsgBox ("Bitte eine Größe über 1,50m angeben") Exit Sub End If If (groesse > 2.5) Then MsgBox ("Bitte eine Größe unter 2,50m angeben") Exit Sub End If If (gewicht < 45) Then MsgBox ("Bitte ein Gewicht über 45kg angeben") Exit Sub End If If (gewicht > 200) Then MsgBox ("Bitte ein Gewicht unter 200kg angeben") Exit Sub End If If koerperlicheaktivi < 1 Then strText = " wichtig !!!" MsgBox ("Bitte eine Zahl zwischen 1-6 angeben") Exit Sub End If If koerperlicheaktivi > 6 Then strText = " wichtig !!!" MsgBox ("Bitte eine Zahl zwischen 1-6 angeben") Exit Sub End If If geschlecht = "w" And koerperlicheaktivi = 1 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 1 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "w" And koerperlicheaktivi = 2 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 1.2 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "w" And koerperlicheaktivi = 3 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 1.45 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "w" And koerperlicheaktivi = 4 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 1.65 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "w" And koerperlicheaktivi = 5 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 1.85 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "w" And koerperlicheaktivi = 6 Then kalorienumsatzfrauen = (655.1 + (9.6 * gewicht) + (1.8 * groesse) - (4.7 * alter)) * 2.2 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzfrauen) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 1 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 1 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 2 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 1.2 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 3 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 1.45 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 4 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 1.65 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 5 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 1.85 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub ElseIf geschlecht = "m" And koerperlicheaktivi = 6 Then kalorienumsatzmaenner = (66.47 + (13.7 * gewicht) + (5 * groesse) - (6.8 * alter)) * 2.2 MsgBox ("Ihr Kalorienbedarf beträgt: " & kalorienumsatzmaenner) Exit Sub End If End Sub Zitieren
MartinSt Geschrieben 20. April 2010 Geschrieben 20. April 2010 du kannst einen char bzw string für das Geschlecht nehmen. warum denn jetzt currency statt double? Zitieren
MartinSt Geschrieben 20. April 2010 Geschrieben 20. April 2010 (bearbeitet) Wenn du die gesamte Berechnung als VBA im Excel machst, warum benutzt du dann die Inputboxen, statt den Anwender die notwendigen Eingaben im Sheet erfassen zu lassen wobei dann auch die Auswahl über Auswahllisten einfacher wäre? strText = " wichtig !!!" Ausrufezeichen, noch dazu mehrfache, in Hinweisen interpretiere ich alles Anbrüllen des Anwenders. Überlege mal selber, wie du reagieren würdest, wenn dich ein Bankmitarbeiter anbrüllt, weil du die Überweisung falsch ausgefüllt hast. Bearbeitet 20. April 2010 von MartinSt Zitieren
Empfohlene Beiträge
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.