Avatar billede stinejh1980 Nybegynder
09. november 2005 - 11:50 Der er 13 kommentarer og
2 løsninger

Had er galt med denne if...then...else

Hvad er galt med disse if sætninger

Sub BtnSPLaengdeHent_Click(sender As Object, e As EventArgs)
Dim SP1, SP2, SP3, SP4, SP5

if TxtProduktlinieResultat.text = "cr" then
SP1 = TxtULResultat.text*10
    else  SP1 = "Gennemgående"
TxtSPLae1Resultat.text = SP1
end if

if TxtProduktlinieResultat.text = "cr, of" then
SP2 = TxtULResultat.text*15/100
    else  SP2 = TxtULResultat.text*20
TxtSPLae2Resultat.text = SP2
end if

if TxtProduktlinieResultat.text = "pf, rc" then
else
    if TxtProduktlinieResultat.text = "cr" then
    else
        if TxtProduktlinieResultat.text = "of" then
            SP3 = TxtULResultat.text*20
        end if
    SP3 = TxtULResultat.text*15
    End if
SP3 = TxtULResultat.text*25
TxtSPLae3Resultat.text = SP3
end if

if TxtProduktlinieResultat.text = "pf, rc" then
else
    if TxtProduktlinieResultat.text = "cr" then
    else
        if TxtProduktlinieResultat.text = "of" then
            SP3 = TxtULResultat.text*20
        end if
    SP4 = TxtULResultat.text*15
    End if
SP4 = TxtULResultat.text*30
TxtSPLae4Resultat.text = SP4

end Sub


Lige gyldig hvad jeg sætter TxtProduktlinieResultat.text til, så tager den første linie i min if

Jeg har også prøvet med
if TxtProduktlinieResultat.text = "cr" then
SP1 = TxtULResultat.text*10
    else  SP1 = "Gennemgående"
TxtSPLae1Resultat.text = SP1
end if

Men det samme sker

/ElvStine
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 11:52 #1
Ups jeg mente, jeg har også prøvet

if TxtProduktlinieResultat.text = "cr" then
    else  SP1 = "Gennemgående"
SP1 = TxtULResultat.text*10
TxtSPLae1Resultat.text = SP1
end if
Avatar billede martin_moth Mester
09. november 2005 - 12:03 #2
Det er da noget vrøvl du skriver:

if TxtProduktlinieResultat.text = "cr" then

else
  SP1 = "Gennemgående"
  SP1 = TxtULResultat.text*10
  TxtSPLae1Resultat.text = SP1
end if

Mener du ikke:

if TxtProduktlinieResultat.text = "cr" then
  SP1 = "Gennemgående"
else
  SP1 = TxtULResultat.text*10
  TxtSPLae1Resultat.text = SP1
end if
Avatar billede martin_moth Mester
09. november 2005 - 12:06 #3
Syntaksen er

If 'betingelse' Then
  'det der sker hvis betingelse er opfyldt'
Else
  'det der sker hvis betingelse IKKE er opfyldt'
End If

Skriv det ordenligt op som vist ovenfor - så du selv kan se hvad du laver
Avatar billede martin_moth Mester
09. november 2005 - 12:11 #4
Kan se der er en del ting du skal have styr på.

En textbox indeholder tekst. fx.
  Text1.text = "Banan"
Du kan ikke skrive
  Text1.Text * 10 - det svarer til at skrive Banan*10 - det er svært at regne ud for en PC

Hvis du vil lave det der står i en textbox om til et tal, skal du først bruge Val()

Text1.Text="10"
Val(Text1.Text) * 2 (lig 20)

:o)
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 12:35 #5
Jeg har bytte rundt på det så mange gange for at få det til at virke. Jeg prøver lige en sidste gang.
Kan jeg oppe i starten af sub - under dim skrive
Val(Text1.Text)=X

og så i hver af mine if længere nede skrive X*10?
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 13:26 #6
Nu har jeg skrevet :

Sub BtnSPLaengdeHent_Click(sender As Object, e As EventArgs)
Dim SP1, SP2, SP3, SP4, SP5
    if TxtProduktlinieResultat.text = "cr" then
        SP1 = val(TxtULResultat.text)*10
    else  SP1 = "Gennemgående"
        TxtSPLae1Resultat.text = SP1
    end if
   
    if TxtProduktlinieResultat.text = "cr, of" then
        SP2 = val(TxtULResultat.text)*15
    else  SP2 = val(TxtULResultat.text)*20
        TxtSPLae2Resultat.text = SP2
    end if
   
    if TxtProduktlinieResultat.text = "pf, rc" then
        SP3 = val(TxtULResultat.text)*25
    else
        if TxtProduktlinieResultat.text = "cr" then
            SP3 = val(TxtULResultat.text)*15
        else
            if TxtProduktlinieResultat.text = "of" then
            SP3 = val(TxtULResultat.text)*20
            end if
        End if
        TxtSPLae3Resultat.text = SP3
    end if
   
    if TxtProduktlinieResultat.text = "pf, rc" then
        SP4 = val(TxtULResultat.text)*30
    else
        if TxtProduktlinieResultat.text = "cr" then
            SP4 = val(TxtULResultat.text)*15
        else
            if TxtProduktlinieResultat.text = "of" then
                SP3 = val(TxtULResultat.text)*20
            end if
        End if
        TxtSPLae4Resultat.text = SP4
    End if
   
end Sub

Men  den vil ikke vise SP3 og SP4
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 13:34 #7
+ SP1 bliver ved med at være "gennemgående" lige gyldig hvad der står i TxtProduktlinie.text
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 15:34 #8
Og dette virker heller ikke

    Sub BtnSPLaengdeHent_Click(sender As Object, e As EventArgs)
    Dim SP1, SP2, SP3, SP4, X
    X = val(TxtULResultat.text)
   
        if TxtProduktlinieResultat.text = "cr" then
            SP1 = X*10
            SP2 = X*15
            SP3 = X*15
            SP4 = X*15
        else
            if TxtProduktlinieResultat.text = "pf" then
                SP1 = "Gennemgående"
                SP2 = X*20
                SP3 = X*25
                SP4 = X*30
            else
                if TxtProduktlinieResultat.text = "of" then
                    SP1 = "Gennemgående"
                    SP2 = X*15
                    SP3 = X*20
                    SP4 = X*20
                else
                    if TxtProduktlinieResultat.text = "rc" then
                        SP1 = "Gennemgående"
                        SP2 = X*20
                        SP3 = X*25
                        SP4 = X*30
                    end if
                end if
            end if
        End if
        TxtSPLae1Resultat.text = SP1
        TxtSPLae2Resultat.text = SP2
        TxtSPLae3Resultat.text = SP3
        TxtSPLae4Resultat.text = SP4

    end Sub
Avatar billede martin_moth Mester
09. november 2005 - 15:50 #9
Jeg tror ikke du har helt styr på de der if-then-else sætninger - prøv at kik på mit svar af  12:06:19

Du kan med fordel bruge select case, når du tjekker den samme variabel for flere værdier. Copy-paste nedenstående, og se kommentarene:


    Sub BtnSPLaengdeHent_Click(sender As Object, e As EventArgs)

    Dim SP1 As String  'Når du kender variabeltypen. så brug den rigtige type!
    Dim SP2 As String
    Dim SP3 As String
    Dim SP4 As String
    Dim X 'as ... Long = heltal, double = decimaltal. Vælg det der passer

    X = Val(TxtULResultat.Text)
    MsgBox "kontrol. X indeholder værdien : " & X
    MsgBox "kontrol. X indeholder værdien : " & TxtProduktlinieResultat.Text

    Select Case TxtProduktlinieResultat.Text
    Case "cr"
      SP1 = CStr(X * 10) 'Cstr konverterer en værdi om til en streng
      SP2 = CStr(X * 15)
      SP3 = CStr(X * 15)
      SP4 = CStr(X * 15)
    Case "pf" Or "rc" 'Der sker det samme for pf som for rc
      SP1 = "Gennemgående"
      SP2 = CStr(X * 20)
      SP3 = CStr(X * 25)
      SP4 = CStr(X * 30)
    Case "of"
      SP1 = "Gennemgående"
      SP2 = CStr(X * 15)
      SP3 = CStr(X * 20)
      SP4 = CStr(X * 20)
    Case Else
      MsgBox "textboxen indeholder ikke 'pf','rc' eller 'cr'"
    End Select

    TxtSPLae1Resultat.Text = SP1
    TxtSPLae2Resultat.Text = SP2
    TxtSPLae3Resultat.Text = SP3
    TxtSPLae4Resultat.Text = SP4

  End Sub


Ovenstående er principielt ikke ændret i forhold til det du selv laver - det er bare en anden måde at gøre det på.

Mulige fejlkilder:

1) er du SIKKER på at TxtProduktlinieResultat er skrevet 100% rigtigt - ingen stavefejl osv.?

2) er du SIKKER på at TxtProduktlinieResultat.Text indeholder de værdier du tror

Prøv at kør ovenstående - vend tilbage, hvis det ikke virker
Avatar billede martin_moth Mester
09. november 2005 - 15:52 #10
Ret fra
  MsgBox "kontrol. X indeholder værdien : " & TxtProduktlinieResultat.Text
til
  MsgBox "kontrol. TxtProduktlinieResultat.Text indeholder værdien : " & TxtProduktlinieResultat.Text
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 16:19 #11
Ja jeg er sikker på at det der står i TxtProd... er rigtigt
det virker
Avatar billede stinejh1980 Nybegynder
09. november 2005 - 16:34 #12
Tak for hjælpen
Jeg troede jeg havde ok styr på VB og ASP, men ikke så meget som jer andre kan jeg se.
Avatar billede martin_moth Mester
10. november 2005 - 07:52 #13
De fejl/uregelmæssigheder der var:

Erklær altid variabler som den rigtige type, hvis du har mulighed for det - skriver du ikek typen, bliver de automatisk erklæret som en "Variant".

Pas på med at blande strings og tal. Skriver du tallet 10 i en textbox, er det noget tekst der består af et et-tal og et nul - det er IKKE tallet 10. Derfor brugte jeg CStr()

Dine if-then-else struktur havde en del fejl. Se 09/11-2005 12:06:19

Dit program vil også give fejl, hvis du skriver "OF" i stedet for "of". Du kan bruge LCase(), så du slipper for denne fejl. hvis du vil. Altså skrive
    Select Case LCase(TxtProduktlinieResultat.Text)

Tak for points
Avatar billede stinejh1980 Nybegynder
22. november 2005 - 10:32 #14
Hejsa

HAr lige et ekstar spsm.
Hvis resultatet ikke er et helt talt, hvordan får jeg den så til at sætte punktum istedet for komma??

Min sql kan nemlig ikke helt hitte ud af det.
Avatar billede martin_moth Mester
22. november 2005 - 11:54 #15
Prøv at start et nyt spørgsmål. Og forklar præcis díne forudsætninger, og hvad du vil.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester