Thema Datum  Von Nutzer Rating
Antwort
23.09.2022 11:38:37 Daniel
NotSolved
Blau InputBox Daten summieren
23.09.2022 12:33:12 Mase
NotSolved

Ansicht des Beitrags:
Von:
Mase
Datum:
23.09.2022 12:33:12
Views:
373
Rating: Antwort:
  Ja
Thema:
InputBox Daten summieren

Hi Daniel,

das erste unschöne "Problem" was mir auffällt, ist, dass die Prozedur je nach anzahl Durchläufen auf dem Stack zurückbleibt.

Will sagen, dass die Prozeduren nicht ordentlich abgeschlossen/abgearbeitet werden, sollte sich der Anwender dazu entscheiden, nochmal einen Lauf durchzuführen.

Bei diesem Beispiel und mit geringer anzahl an Durchläufen ist das sicherlich unbedenklich. Wenn sowas mal mit einer grössere Schleife dahinter programmiert wird, kann der Stapelspeicher überlaufen. Die Aufrufliste kann im VB-Editor über die Menüleiste Ansicht | Aufrufliste angeschaut werden. (Stichwort: Rekursive Programmierung)

Beispiel bei zwei Durchläufen:

 

 

Empfehlung:

Schreib Dir eine Einstiegsprozedur und lagere Deine jetzige Sub in eine Funktion aus, deren Rückgabewert die Antwort auf die Frage sein wird, ob noch ne Runde gedreht werden soll oder nicht. Damit ist das Problem vom Stapel.



 

Sum / averag / biggestnumber:

Verwende hier doch schön sauber:

  • WorksheetFunction.Max()
  • WorksheetFunction.Sum()
  • WorksheetFunction.Average()


 

Das Ganze in ein Array dimensionieren - die Dimension liefert Dir die erste Inputbox().

Nicht grossartig verändert und Deiner Programmlogik folgend, schaut Deine Code bei mir jetzt wie folgt aus:

Sub main()

    SumAndAverage
    
End Sub

Function SumAndAverage() As Integer

Dim numbers()       As Double
Dim average         As Double
Dim sum             As Double
Dim biggestnumber   As Double

Dim i               As Double
Dim total           As Variant
Dim answer          As Integer

total = InputBox("How many numbers do you want to enter?")
If total = "" Then
    Exit Function
Else
    ReDim total(1 To total) 'einsbasiert
    ReDim numbers(1 To UBound(total))
End If


For i = 1 To UBound(total)
    numbers(i) = InputBox("Enter some numbers!", "enter numbers")
Next i

sum = WorksheetFunction.sum(numbers())
average = WorksheetFunction.average(numbers())
biggestnumber = WorksheetFunction.Max(numbers())

MsgBox "The result is:" & Chr(10) & _
"sum : " & sum & Chr(10) & _
"average : " & average & Chr(10) & _
"biggest number : " & biggestnumber

answer = MsgBox("Do you want to do another calculation?", vbYesNo + vbQuestion)
SumAndAverage = answer
    


End Function


 

Das Programm startet in der Prozedur Main(), welche lediglich die Funktion ohne Parameter ausführt.

Wenn die Funktion durchlaufen wurde, wird Dir nun die Antwort bzw dessen Integer-Wert auf die Frage "Do you want to do another calculation" zurückgegeben, aber die Funktion beendet.

 

Jetzt kannste mit ner Schleife die Antwort.

  1. vbYES rüft die Funktion wieder auf
  2. vbNO beendet die Prozedur Main() und der Käs' ist gegessen.

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
23.09.2022 11:38:37 Daniel
NotSolved
Blau InputBox Daten summieren
23.09.2022 12:33:12 Mase
NotSolved