Vraag & Antwoord

Programmeren

VB 6.0; End If fout

13 antwoorden
  • 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]
  • Het antwoord is vrij simpel, na if -- Then moet je op een nieuwe regel beginnen met de commando's en de hele zooi afsluiten met end if [code:1:967b6394f9]If Beginkapitaal < 1500 Then MsgBox "Wat een klein bedragje" Exit Sub End If[/code:1:967b6394f9] Dit geldt ook als je maar één commando hebt.
  • 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....
  • 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)
  • 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
  • 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?
  • If Beginbedrag <= 0 Then MsgBox prompt:="Geef een waarde voor het beginkapitaal op", Title:="Fout bij de ivoer" TxtBeginbedrag.SetFocus Exit Sub End If Haal de Exit sub weg, dan zal je programma niet meer afsluiten als je een letter in de plaats van een getal invoerd.
  • Helaas was dat het niet, op de een of andere manier zorgt ie niet dat beginbedrag 0 wordt of dat als dit zo is hij niet meer controleerd of deze 0 is. Hij geeft gewoon meteen een fout aan in Beginbedrag.Txt Als ik 0 of -10 intyp werkt de controle wel dan verschijnt het bericht dat de invoer niet klopt
  • probeer de =0 eens te vervangen door IS NULL, weet niet of t helpt, maar je weet nooit
  • 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]
  • 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.
  • Bedankt , ik ben er trwouens achter gejkomen dat de belangrijkste fout was dat Beginbedrag As "Currency" en de andere als Integer Beginbedrag As Variable hadden moeten zijn Anders werkt de IsNumeric niet
  • [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]

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.