VBA Makro für Gewinnvergleichsrechnung

paralysis

Grünschnabel
Hallo ihr Lieben,

ich gehöre zu den VBA Neulingen und muss ein kleines Makro realisieren. Meine Problemstellung: Makro soll eine einfache Gewinnvergleichsrechnung (Anschaffung einer neuen Maschine: Ja/Nein) durchführen und im Anschluss eine lineare Gleichung lösen (Break-Even-Analyse). Ist einfacher als es klingt, kann bei Bedarf auch ein Beispiel mit Lösung anbieten.


Ich habe bisher ein UserForm mit 4 Textfeldern (inkl. Bezeichnungsfelder) zur Eingabe von:

variable Stückkosten
Umsatz pro Stück
Fixkosten pro Jahr
Auslastung

sowie eine Befehlsschaltfläche "Berechne".

1. Im Excel Worksheet habe ich eine Schaltfläche angelegt (Zur Berechnung), weiß aber nicht wie ich damit die UserForm aufrufen soll um die Werte einzutragen.
2. Den Code für die komplette Berechnung hinterlege ich wohl hinter der Schaltfläche "Berechne" also in dessen Sub, oder?
3. Wie übergebe ich die Werte aus den Textfeldern des Formulars in die Sub? (vielleicht mit textfeldname.value?)
4. Wie kann ich die Ausgabe gestalten bzw. welche Möglichkeiten gibt es da und wie würde das Codemäßig aussehen? (ich vermute msgbox oder in einer Excelzelle direkt?!)


Für Antworten wäre ich sehr dankbar.

Lieben Gruß,
Jörg
 
Hallo ihr Lieben,

ich gehöre zu den VBA Neulingen und muss ein kleines Makro realisieren. Meine Problemstellung: Makro soll eine einfache Gewinnvergleichsrechnung (Anschaffung einer neuen Maschine: Ja/Nein) durchführen und im Anschluss eine lineare Gleichung lösen (Break-Even-Analyse). Ist einfacher als es klingt, kann bei Bedarf auch ein Beispiel mit Lösung anbieten.


Ich habe bisher ein UserForm mit 4 Textfeldern (inkl. Bezeichnungsfelder) zur Eingabe von:

variable Stückkosten
Umsatz pro Stück
Fixkosten pro Jahr
Auslastung

sowie eine Befehlsschaltfläche "Berechne".

1. Im Excel Worksheet habe ich eine Schaltfläche angelegt (Zur Berechnung), weiß aber nicht wie ich damit die UserForm aufrufen soll um die Werte einzutragen.

Im VB-Editor ein "normales" Modul hinzufügen, dort Code wie etwa folgt:
Visual Basic:
Public Sub ShowForm()

     frmDialog.Show vbmodal   'Oder wie auch immer deine UserForm heisst
 
End Sub

Danach rechtsclick auf deinen Button auf dem Excel-Blatt - Makro zuweisen. Das Makro "ShowForm" müsste verfügbar sein.

P.S.: Du solltest korrekterweise auch einen Button auf deiner UserForm anbieten "Abbrechen" oder "Schliessen", um wieder korrekt zurückzukommen.

2. Den Code für die komplette Berechnung hinterlege ich wohl hinter der Schaltfläche "Berechne" also in dessen Sub, oder?
Korrekt!

3. Wie übergebe ich die Werte aus den Textfeldern des Formulars in die Sub? (vielleicht mit textfeldname.value?)
Fast korrekt! textFeldname.Text

4. Wie kann ich die Ausgabe gestalten bzw. welche Möglichkeiten gibt es da und wie würde das Codemäßig aussehen? (ich vermute msgbox oder in einer Excelzelle direkt?!)
Es gehen beide Varianten. Eventuell auch ein Label/Textbox zusätzlich auf der UserForm als "Ergebnis"
 
Vielen Dank soweit! Werde ich gleich ausprobieren.

Noch eine Frage: Ich habe in den Textfeldern eine kleine Prüfung eingebaut, dass bspw. keine Buchstaben eingegeben werden können. Sieht z.B. folgendermaßen aus:

Private Sub fixkosten_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select

Allerdings kann ich nun auch keine Floater eingeben, nur Ganzzahlige.
Weißt du Rat?
 
Vielen Dank soweit! Werde ich gleich ausprobieren.

Noch eine Frage: Ich habe in den Textfeldern eine kleine Prüfung eingebaut, dass bspw. keine Buchstaben eingegeben werden können. Sieht z.B. folgendermaßen aus:

Private Sub fixkosten_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select

Allerdings kann ich nun auch keine Floater eingeben, nur Ganzzahlige.
Weißt du Rat?

Hehehe, hatte dasselbe Problem bei ner eigenen Anwendung. Guckst du:
Visual Basic:
Private Sub txtPreis_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Static Komma As Boolean

    If InStr(1, txtPreis.Text, ",") Then
        
        Komma = True
        
    Else
    
        Komma = False
        
    End If

    If (KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) Or KeyAscii = Asc(",") Then

        If KeyAscii = Asc(",") And Not Komma Then

            KeyAscii = Asc(",")
            
        ElseIf KeyAscii = Asc(",") And Komma Then
        
            KeyAscii = 0

        End If

    Else

        KeyAscii = 0

    End If

End Sub

Erklärung: Obiger Code erlaubt nur Numerische Eingaben inkl. einem einzigen Komma (Sollte anstatt des Kommas der Punkt verwendet werden sollen, musst du oben nur alle Asc(",") durch Asc(".") ersetzen.)
 
Hat alles geklappt, super! Hab die Aufgabe jetzt fertig gestellt - bis auf den Teil mit der Lösung der linearen Gleichung. Habe aber gelesen, dass das in VBA nicht so einfach zu realisieren ist. Mal sehen ob das bisher erst mal gereicht hat ;)
Danke.
 
Dachte das wäre nicht nötig, hat ja keiner gefragt ^^

variable Kosten: 0,12 €
Fixkosten: 7320 €
Umsatz pro Stück: 0,25 €

Gewinn = Umsatz - Kosten
Gewinn = 0
0 = 0,25x - 0,12x - 7320
7320 = 0,13x
x = 56307

That's all ;)

Und wo ist da das Problem? :suspekt:

Visual Basic:
Dim varCost As Double
Dim Umsatz As Double
Dim fixCost As Double
Dim Auslastung as Double

   varCost=txtVarCost.Text
   Umsatz=txtUmsatz.Text
   fixCost=txtFixCost.Text

   Auslastung=fixCost/(Umsatz-varCost)

txtAuslastung.Text=Auslastung
 
Sowas ähnliches hatte ich ja zunächst auch, hatte aber wohl zu komplex gedacht, wegen Umformungen und mich dadurch irritieren lassen. Letztendlich bekam ich auch noch einen Divisionsfehler (Div durch 0), aber klappt jetzt. Vielen Dank für deine Hilfe.
 

Neue Beiträge

Zurück