Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

VB 6.0; End If fout

DarkScribe
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

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