VBA beginners probleempje

Status
Niet open voor verdere reacties.

KaY.NL

Gebruiker
Lid geworden
15 jul 2004
Berichten
981
Hoi!

Ik ben net begonnen met het programmeren in VBA. Ik kreeg de volgende opdracht: Een gebruiker mag 8 getallen invullen waarvan het programma het gemiddelde uit moet rekenen. De gebruiker mag ook 2 getallen en 4, of 6 getallen invullen waarvan vervolgens het gemiddelde berekent moet worden.

Ik heb het geprobeerd met arrays maar het werkt niet helemaal. Wat doe ik fout?

Dit is mijn code:

Private Sub cmdBereken_Click()

'getal variabelen als arrays
Dim getal(8) As Double
Dim getalS(8) As String
Dim n As Integer
Dim aantal As Integer

'uitkomsten en totalen
Dim uitkomst As Double
Dim som As Double

'inlezen van velden
getalS(1) = txtGetal1.Text
getalS(2) = txtGetal2.Text
getalS(3) = txtGetal3.Text
getalS(4) = txtGetal4.Text
getalS(5) = txtGetal5.Text
getalS(6) = txtGetal6.Text
getalS(7) = txtGetal7.Text
getalS(8) = txtGetal8.Text

'minimaal 2 invullen
If getalS(1) And getalS(2) = "" Then
MsgBox ("U moet minimaal 2 getallen invullen")
End If

'uitreken hoeveel velden ingevuld
n = 1

Do While Len(getal(n)) <> 0
n = n + 1
Loop

n = n + 1

'doubles maken
getal(1) = Val(getalS(1))
getal(2) = Val(getalS(2))
getal(3) = Val(getalS(3))
getal(4) = Val(getalS(4))
getal(5) = Val(getalS(5))
getal(6) = Val(getalS(6))
getal(7) = Val(getalS(7))
getal(8) = Val(getalS(8))

'optellen
For aantal = 1 To n
som = som + getal(aantal)
Next aantal

'delen door aantal
uitkomst = som / n

'weergeven
MsgBox ("Het gemiddelde van de door u ingevoerde" & aantal & "getallen, is:" & Str(uitkomst))


End Sub
 
Laatst bewerkt:
Je moet eerst een array van de text-box gaan maken.
Stel dat het form leeg is.
Je plaatst nu een text-box. Je geeft een rechtsklik op
die text-box en klik je op Copy. Vervolgens geef je een
rechtsklik op het Form en klik je op Paste.

Er verschijnt nu een melding "You already have a
control named 'text1'. Do you want to create a control
array?"

Je klikt op OK, want je wilt een array van die text-box
gaan maken.

Een copie van die text-box wordt automatisch
linksboven op het Form geplaatst. Je versleept hem nu
naar de plek waar je het hebben wilt.

De naam van die text-box(dit is de 2e text-box) is text1
(1), waarvan de index een 1 is en de eerste text-box
heeft 0(nul) als index.

Wederom geef je een rechtsklik op het Form om de
derde copie van die text-box te gaan maken. Dit gaat
zo door totdat je 8 text-boxen hebt. De naam van de 8e
textbox (je kunt dat in de eigenschappen van die text-
box zien) is text1(7), je ziet dat de index een 7 is en
geen 8, dit komt omdat wanneer wij met arrays gaan
werken de index altijd bij nul begint.

Selecteer nu één v.d. 8 text-boxen en verander de
naam in txtGetal.

Onderstaande code is enigszins anders dan de
oorspronkelike:

Code:
Private Sub cmdBereken_Click()
'getal variabelen als arrays
Dim getal(7) As Double
Dim getalS(7) As String
Dim n As Integer
Dim aantal As Integer
Dim teller As Integer

'uitkomsten en totalen
Dim uitkomst As Double
Dim som As Double

'inlezen van velden
For teller = 0 To 7
   getalS(teller) = Trim(txtGetal(teller).Text)
Next teller

'minimaal 2 invullen
'(uitreken hoeveel velden ingevuld)
n = 0
For teller = 0 To 7
  If getalS(teller) <> "" Then
     n = n + 1
  End If
Next teller
If n <= 1 Then
   MsgBox ("U moet minimaal 2 getallen invullen")
   Exit Sub
End If

'doubles maken
For teller = 0 To 7
   getal(teller) = Val(getalS(teller))
Next teller

'optellen
'aantal (variabele n is hierboven
'al bekend)
som = 0
For teller = 0 To 7
   If getalS(teller) <> "" Then
      som = som + getal(teller)
   End If
Next teller
'delen door aantal
uitkomst = som / n

'weergeven
aantal = n
MsgBox ("Het gemiddelde van de door u ingevoerde " & 
aantal & " getallen, is:" & Str(uitkomst))

End Sub

Verder heb ik nog één variabele toegevoegd, de naam
van die variabele is teller.

Onderstaande code kun je ook gebruiken om tijdens de
start v.h. programma alle text-boxen leeg te maken.

Code:
Private Sub Form_Load()
  For teller = 0 To 7
     txtGetal(teller) = ""
  Next teller
End Sub

Dennis.

EDIT Heb iets over het hoofd gezien: For teller = 0 To n is nu veranderd in For teller = 0 To 7
 
Laatst bewerkt:
Ej bedankt man! ik ga er direct mee aan het werk.
 
Die Trim() functie zorgt ervoor dat wanneer je per ongeluk een spatie vóór en/of achter een getal intypt deze weggehaald wordt. Een spatie(wat niet zichtbaar is) is voor het doeleind van je programma(een berekening programma) niet erg gewenst, daarom moeten we die spatie(s) elimineren.
Andere programmeertalen beschikken ook over die functie en dat duidt des te meer op de belangrijkheid van die functie. Ook voor text-boxen die als password velden gebruikt worden.

Zo zal bijvoorbeeld 'Do While Len(getal(n)) <> 0' ook valse informatie verstrekken, indien er per ongeluk een spatie in één der text-boxen voorkomt.

Je algehele code kan trouwens ook nog korter(in één blok) worden geprogrammeerd. De variabele aantal is eigenlijk niet per sé nodig, hiervoor kun je de variabele n(n is afkomstig van het Engelse woord 'number', wat ook 'aantal' betekent) ook gebruiken.

Ben toevallig even thuis, maar ga zo weer weg.

Is het trouwens allemaal wel gelukt?

Dennis.
 
Ik ben er druk mee aan het werk. Ik heb net Visual Basic 2005 gedownload dus ik moet nog even wennen. Alles lijkt te werken. Ik heb alleen de tekstboxen nog apart moeten nummeren. Ik laat nog wel even wat meer weten.
 
Jammer dat ik Visual Basic 2005 nog steeds niet gedownload heb. Ik denk, dat ik straks wel ga doen, maar als het goed is, is dat nog in een test fase(beta versie). Dat is ook de reden waarom ik het downloaden ervan steeds uitgesteld heb.

Dennis.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan