Thema Datum  Von Nutzer Rating
Antwort
06.06.2008 21:12:54 Ben
NotSolved
Blau Aw:Problem bei Datenfeld
07.06.2008 07:45:46 jh
NotSolved

Ansicht des Beitrags:
Von:
jh
Datum:
07.06.2008 07:45:46
Views:
934
Rating: Antwort:
  Ja
Thema:
Aw:Problem bei Datenfeld
Hallo,

es sind gleich mehrere Fehler bzw. Ungereimtheiten.

1. Du deklarierst am Anfang eine Integerveriable intErgebnis
und weist ihr dann das Ergebnis der Function Arithmetischesmittel
zu, bevor überhaupt Werte eingegeben wurden. Außerdem wird diese
Variable danach nie wieder verwendet und ist somit überflüssig.

2. Variable sind immer lokal in dem Bereich, wo sie deklariert
werden. Da das Array intGröße(9) in der Sub Main deklariert
wird, ist es auch nur dort bekannt, und deine Function hält
die Verwendung seiner Elemente deshalb für Aufrufe einer anderen
Function, die es aber nirgends findet. Du musst also entweder
das Array auf Modulebene deklarieren (die Dim-Anweisung VOR
die Sub Main schreiben), dann ist es im gesamten Codemodul bekannt,
oder du musst es der Function als Parameter übergeben:

Function Arithmetischesmittel(intGröße() As Integer) As Integer

Das leere Klammernpaar zeigt an, dass es sich bei dem Parameter
um ein Array handelt. Wenn du diese Variante wählst, musst du den
Parameter natürlich beim Aufruf der Function auch übergeben:

Cells(11, 1) = Arithmetischesmittel(intGröße())

3. Das arithmetische Mittel wird nicht in jedem Fall ganzzahlig
sein. Deine Function berechnet das Ergebnis zwar richtig, da sie
aber als Integer deklariert ist, gibt sie es nicht korrekt
weiter. Du musst also eine Single-Function daraus machen, damit
die Nachkommastellen mit übergeben werden:

Function Arithmetischesmittel(intGröße() As Integer) As Single

4. Auch in VBA gilt "Punktrechnen geht vor Strichrechnen". In
deinem Code werden die Summanden 1 bis 8 addiert, dann der
neunte Wert durch neun dividiert und zum Ergebnis addiert.
Du musst also die Berechnung der Summe in Klammern setzen,
bevor du sie durch 9 dividierst:

Arithmetischesmittel = (intGröße(1) + intGröße(2) + intGröße(3) _
+ intGröße(4) + intGröße(5) + intGröße(6) + intGröße(7) + _
intGröße(8) + intGröße(9)) / 9

Mit den jetzt gemachten Korrekturen funktioniert das Ganze erst
einmal. Es gibt aber weiteren Verbesserungsbedarf. Das neunmalige
Aufrufen der InputBox-Funktion ist für den Programmierer umständlich
und für den Anwender verwirrend, wenn er den Zweck des ganzen nicht
durchschaut. Es ist deshalb besser, die Eingabe in einer Schleife
vorzunehmen, das erspart erstens das neunmalige Wiederholen der
Codezeile und ermöglicht außerdem eine bessere Information an den
Anwender:

Dim i As Integer
For i = 1 To 9
intGröße(i) = InputBox("Bitte geben Sie die " & i & ". Größe ein")
Next i

Weil du die Benutzereingaben nicht überprüfst, kann man dein
Programm ganz einfach "abschießen", indem man statt Zahlen Text
eingibt. Außerdem könnte der Benutzer auf den Abbrechen-Button
der InputBox klicken oder gar nichts eingeben. Diese beiden
Sonderfälle kannst du so berücksichtigen:

Dim i As Integer
Dim vntTemp As Variant
For i = 1 To 9
Do
vntTemp = InputBox("Bitte geben Sie die " & i & ". Größe ein")
If vntTemp = "" Then
MsgBox "Die Eingabe wurde abgebrochen."
Exit Sub
End If
If IsNumeric(vntTemp) = False Then
MsgBox "Bitte nur Zahlen eingeben!"
End If
Loop Until IsNumeric(vntTemp) = True
intGröße(i) = vntTemp
Next i

Gruß

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
06.06.2008 21:12:54 Ben
NotSolved
Blau Aw:Problem bei Datenfeld
07.06.2008 07:45:46 jh
NotSolved