Ga naar inhoud

VB 6.0; End If fout


anoniem

Aanbevolen berichten

Ik ben bezich met een boek over visual basic (Snel leren programmeren met Visual Basic 6.0) Maar er staan nog al wat fouten in. Ik heb deze code uit het boek overgetyped maar ik krijg een fout: [code:1:95f9662f16]Private Sub cmdUitrekenen_Click() Dim Beginkapitaal As Currency Dim Looptijd As Integer Dim Rentevoet As Single Dim Jaren As Integer Beginkapitaal = TxtBeginkapitaal.Text Looptijd = txtLooptijd.Text Rentevoet = txtRentevoet.Text If IsNumeric(Beginkapitaal) = False Then Beginkapitaal = 0 If Beginkapitaal <= 0 Then MsgBox prompt:="Geef een waarde voor het beginkapitaal op", Title:="Fout bij de ivoer" TxtBeginkapitaal.SetFocus Exit Sub End If If IsNumeric(Looptijd) = False Then Looptijd = 0 If Looptijd <= 0 Then MsgBox prompt:="geef een waarde op voor de looptijd", Title:="Fout bij de invoer" txtLooptijd.SetFocus Exit Sub End If If IsNumeric(Rentevoet) = False Then Rentevoet = 0 If Rentevoet <= 0 Then MsgBox prompt:="Geef een juiste waarde op voor de rente", Title:="Fout bij de invoer" txtRentevoet.SetFocus Exit Sub End If For Jaren = 1 To Looptijd Beginkapitaal = Beginkapitaal * (1 + Rentevoet / 100) picUitvoer.Print "In het "; Jaren & "e. jaar"; Tab(18); Format(Beginkapitaal, "Currency") Next End Sub [/code:1:95f9662f16]
Link naar reactie
Het is niet waar dat je na een If .... Then ..... altijd op een nieuwe regel moet beginnen... Het volgende commando werk echt wel: [code:1:d282132f38]If Digits = 1 Then MyString = "One" Else MyString = "More than one"[/code:1:d282132f38] Want je kan het If ... Then ... commando in Block mode gebruiken en in single line mode (Single line mode zie boven) Block mode: [code:1:d282132f38]If Digits = 1 then MyString = "One" Else MyString = "More than one" End If [/code:1:d282132f38] Wat is precies de fout melding???? En waar treed die fout op??? Altijd handig om te weten....
Link naar reactie
Het is een feit dat die regel van jou werkt, maar het is natuurlijk mooier en veel duidelijker als je voor alle [b:ecf419f0e3]if then[/b:ecf419f0e3] blokken dezelfde manier gebruikt, ook al heb je slechts 1 statement. Overigens treed bij hem de fout op in het eerste [b:ecf419f0e3]if end if[/b:ecf419f0e3] blok, hij gebruikt een aantal statements terwijl hij de eerste statement achter de [b:ecf419f0e3]if then[/b:ecf419f0e3] zet. Hier moet hij het eerste statement na [b:ecf419f0e3]then[/b:ecf419f0e3] al op de volgende regel zetten. Dit geldt voor alle drie de blokken. Als hij gewoon standaard aanhoudt dat na iedere [b:ecf419f0e3]then[/b:ecf419f0e3] de statements op de volgende regel begint en dat zo iets eindigt met [b:ecf419f0e3]end if[/b:ecf419f0e3], dan zal hij dit soort fouten niet meer maken. (typo weggewerkt)
Link naar reactie
Bedankt de fout was trouwens "end if without block if" Als ik trouwens sommige dingen een regel lager zet begint vb te zeuren over expected statements en zomaakt het uit og ik: [code:1:2b554700bb]Variabele = Inputbox(Prompt:="blablablabla")[/code:1:2b554700bb] of (zoals in boek) [code:1:2b554700bb] Variabele = Inputbox(Prompt:="blabla blabla"[/code:1:2b554700bb] dus het 2e deel van de tekst op een nieuwe regel na de variabele
Link naar reactie
Min nieuwe code is alvolgt geworden: [code:1:d0eef401d1] Private Sub cmdUitrekenen_Click() Dim Beginbedrag As Currency Dim Looptijd As Integer Dim Rente As Single Dim Jaren As Integer Beginbedrag = TxtBeginbedrag.Text Looptijd = txtLooptijd.Text Rente = txtRente.Text If IsNumeric(Beginbedrag) = False Then Beginbedrag = 0 If Beginbedrag <= 0 Then MsgBox prompt:="Geef een waarde voor het beginkapitaal op", Title:="Fout bij de ivoer" TxtBeginbedrag.SetFocus Exit Sub End If If IsNumeric(Looptijd) = False Then Looptijd = 0 If Looptijd <= 0 Then MsgBox prompt:="geef een waarde op voor de looptijd", Title:="Fout bij de invoer" txtLooptijd.SetFocus Exit Sub End If If IsNumeric(Rente) = False Then Rente = 0 If Rente <= 0 Then MsgBox prompt:="Geef een juiste waarde op voor de rente", Title:="Fout bij de invoer" txtRente.SetFocus Exit Sub End If For Jaren = 1 To Looptijd Beginbedrag = Beginbedrag * (1 + Rente / 100) picUitvoer.Print "In het "; Jaren & "e. jaar"; Tab(18); Format(Beginbedrag, "Currency") Next End Sub [/code:1:d0eef401d1] Het enige probleem nu is dat de reden waarom de ingewikkelde if-instructies erinzitten niet werkt. Dit was namelijk om te voorkomen dat het programma afsluit als je een letter in plaats van een getal invoerd. Helaas werkt dit neit. wat heb ik deze keer fout gedaan?
Link naar reactie
Visual Basic beschouwt de tekens die de gebruiker in een tekstveld invoert als een tekenreeks, ook als die uit cijfers bestaat. Met de functie Val zet u deze tekenreeks om in een numerieke waarde Dus: Beginbedrag = Val(TxtBeginbedrag.Text) zet dit er maar eens tussen...... [i:4820a2ec7f]En SDK, een tip; sla geen letter of hoofdstuk van het boek over, want dan mis je geheid de essentie van het stukje code dat jij nu ingetikt hebt. Ik kan mij niet voorstellen dat dit stukje dan ook letterlijk in je boek staat, zonder een verhaal erbij.[/i:4820a2ec7f]
Link naar reactie
Ik heb de code herschreven om het een stuk duidelijker te maken, dit is de nieuwe code: [code:1:0409728add]Option Explicit Private Sub cmdUitrekenen_Click() Dim Beginbedrag As Currency Dim Looptijd As Integer Dim Rente As Single Dim Jaren As Integer If IsNumeric(TxtBeginbedrag.Text) Then Beginbedrag = TxtBeginbedrag.Text Else TxtBeginbedrag.Text = "" MsgBox "Geef een waarde op voor het beginkapitaal", vbOKOnly + vbInformation, "Fout bij de invoer" TxtBeginbedrag.SetFocus Exit Sub End If If IsNumeric(txtLooptijd.Text) Then Looptijd = txtLooptijd.Text Else txtLooptijd.Text = "" MsgBox "Geef een waarde op voor de looptijd", vbOKOnly + vbInformation, "Fout bij de invoer" txtLooptijd.SetFocus Exit Sub End If If IsNumeric(txtRente.Text) Then Rente = txtRente.Text Else txtRente.Text = "" MsgBox "Geef een waarde op voor de rente", vbOKOnly + vbInformation, "Fout bij de invoer" txtRente.SetFocus Exit Sub End If For Jaren = 1 To Looptijd Beginbedrag = Beginbedrag * (1 + Rente / 100) picUitvoer.Print "In het "; Jaren & "e. jaar"; Tab(18); Format(Beginbedrag, "Currency") Next End Sub[/code:1:0409728add] In het begin, de eerste regels, probeer je de inhoud van tekstvelden aan variabelen te geven maar zodra de inhoud van die tekstvelden niet te gebruiken zijn door die variabelen krijg je fouten. Met IsNumeric test je of die waarden inderdaad getallen voorstellen, en aan de hand van de uitkomst van die test ga je verder. Is de waarde een getal dan komt die in de variabele, anders krijg je een nieuwe kans om een getal in te voeren. Dat ik het tekstveld leegmaak is natuurlijk alleen maar makkelijker voor de gebruiker maar die heeft dan niet de kans om te kijken wat er nou fout aan was. Je kunt de code nog verder verfijnen door te testen op een getal 0 of een negatief getal. [code:1:0409728add] If IsNumeric(TxtBeginbedrag.Text) Then If TxtBeginbedrag > 0 Then Beginbedrag = TxtBeginbedrag.Text Else TxtBeginbedrag.Text = "" MsgBox "Geef een waarde op voor het beginkapitaal", vbOKOnly + vbInformation, "Fout bij de invoer" TxtBeginbedrag.SetFocus Exit Sub End If Else TxtBeginbedrag.Text = "" MsgBox "Geef een waarde op voor het beginkapitaal", vbOKOnly + vbInformation, "Fout bij de invoer" TxtBeginbedrag.SetFocus Exit Sub End If [/code:1:0409728add] Hier test je eerst of het wel een getal betreft. Is het een getal dan ga je testen of het getal groter is dan 0. Als die voorwaarde ook klopt dan zet je die waarde in de variabele. In beide gevallen krijg je een foutboodschap als de invoer niet aan de voorwaarden voldoet.
Link naar reactie
[quote:c8827123da="sdk"]Ik ben bezich met een boek over visual basic (Snel leren programmeren met Visual Basic 6.0) Maar er staan nog al wat fouten in. [/quote:c8827123da] "snel leren programmeren met Visual Basic", Bedoel je hiermee correct programmeren ;) Gecorrigeerde code (en begrijpelijke code voor een n00b)... [code:1:c8827123da]Private Sub cmdUitrekenen_Click() Dim Beginkapitaal As Integer Dim Looptijd As Integer Dim Rentevoet As Integer Dim Jaren As Integer If (IsNumeric(TxtBeginkapitaal.Text) = False) Then Beginkapitaal = 0 Else Beginkapitaal = Val(TxtBeginkapitaal.Text) EndIf If (Beginkapitaal <= 0) Then MsgBox prompt:="Geef een waarde voor het beginkapitaal op", Title:="Fout bij de ivoer" TxtBeginkapitaal.SetFocus Exit Sub End If If (IsNumeric(txtLooptijd.Text) = False) Then Looptijd = 0 Else Looptijd = Val(txtLooptijd.Text) End If If (Looptijd <= 0) Then MsgBox prompt:="geef een waarde op voor de looptijd", Title:="Fout bij de invoer" txtLooptijd.SetFocus Exit Sub End If If (IsNumeric(txtRentevoet.Text) = False) Then Rentevoet = 0 Else Rentevoet = Val(txtRentevoet.Text) Endif If (Rentevoet <= 0) Then MsgBox prompt:="Geef een juiste waarde op voor de rente", Title:="Fout bij de invoer" txtRentevoet.SetFocus Exit Sub End If For Jaren = 1 To Looptijd Beginkapitaal = Beginkapitaal * (1 + Rentevoet / 100) picUitvoer.Print "In het "; Jaren & "e. jaar"; Tab(18); Format(Beginkapitaal, "Currency") Next End Sub [/code:1:c8827123da]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...