IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Nefunkční porovnávání Visual Basic

Aktivity
Avatar
Jiri Krček
Člen
Avatar
Jiri Krček:18.12.2017 13:00

Zdravím,

jsem začátečník a píšu program, něco jako atletická kalkulačka. Chci při překročení určitého času , aby počet bodů byl 0, ale ikdyž dám čas menší tak je stále počet bodů 0 .

Tady je kód :

https://pastebin.com/MeAw7Jtn

Děkuji každému za radu nebo připomínku!

 
Odpovědět
18.12.2017 13:00
Avatar
Jaroslav
Člen
Avatar
Odpovídá na Jiri Krček
Jaroslav:18.12.2017 13:25

Mal by si si dat pozor do akych datovych typov ukladas hodnoty a osetrit vstup od uzivatela. Zrejme v podmienke porovnavas realne cislo s retazcom, alebo objektom.

 
Nahoru Odpovědět
18.12.2017 13:25
Avatar
zelvicek
Člen
Avatar
Odpovídá na Jiri Krček
zelvicek:18.12.2017 13:53

Předpokládám, že sis to debugoval. Jaképak hodnoty se ti ve Watch okně ukázaly?

 
Nahoru Odpovědět
18.12.2017 13:53
Avatar
Jiri Krček
Člen
Avatar
Odpovídá na zelvicek
Jiri Krček:18.12.2017 14:06

Variant/String

Vím, že by ten datový typ měl bejt jiný v první části, ale nevím, jak toho docílit.
Zkoušel jsem Dim sto as string a udělat jinou proměnnou pro první část dim stomax as double a pak nevím, jak docílit stejné hodnoty jako je vstup dal jsem stomax = sto , ale hned mi to hodí chybu..

Dim sto As String
Dim stomax As Double

sto = InputBox("Zadejte čas na 100m (formát času např.: 9.46)", "Čas za 100m") 'Sprint for 100m
max100 = 17.15
stomax = sto

If stomax > max100 Then

 
Nahoru Odpovědět
18.12.2017 14:06
Avatar
JK CZ
Člen
Avatar
Odpovídá na Jiri Krček
JK CZ:18.12.2017 20:08

Treba nejak takto?:

Sub pocitac()

    Dim sto As Single 'JK
    Dim strInp As String 'JK Vstupni string
    Dim max100 As Single: max100 = 17.15


    'Athletic calculator
    strInp = InputBox("Zadejte čas na 100m (formát času např.: 9.46)", "Čas za 100m")  'Sprint for 100m

    If IsNumeric(strInp) Then 'JK Bylo zadano cislo?

        sto = strInp 'JK Prevod na cislo

        'Tvuj kod
        If sto > max100 Then
                            score100 = 0#   'Přiřazení bodové hodnoty. Příkaz FoundCell.Row zjistí na kolikítém řádku se čas nachazí a sloupec je pořád stejný
                          Sheets("List2").Select                   'Aktivuje List2
                          ActiveSheet.Cells(1, 1).Value = "100 m " 'Hlavička
                          ActiveSheet.Cells(2, 1).Value = score100 ' Zapíše bodový výsledek na danou pozici
                          MsgBox "Bodová hodnota  za čas: " & sto & "  je  " & score100, , "Bodová hodnota za 100m"
                    Else

                               For I = 1 To 1402   ' řádek 11402
                                 rozsah = "B" & I    ' Sloupec B řádek 1 - 1402
                                         With Range(rozsah) 'Vyhledání zadané hodnoty dveste ve sloupci B a řádku 11402
                                             Set FoundCell = .Cells.Find(what:=sto, _
                                                               after:=.Cells(.Cells.Count), _
                                                               LookIn:=xlFormulas, _
                                                               Lookat:=xlPart, _
                                                               searchorder:=xlByRows, _
                                                               searchdirection:=xlNext, _
                                                               MatchCase:=False)
                                           End With
                                       If FoundCell Is Nothing Then
                                                        'posunout o jednu bunku dolu??
                     Else

                            score100 = Cells(FoundCell.Row, 1).Value 'Přiřazení bodové hodnoty. Příkaz FoundCell.Row zjistí na kolikítém řádku se čas nachazí a sloupec je pořád stejný
                          Sheets("List2").Select                   'Aktivuje List2
                          ActiveSheet.Cells(1, 1).Value = "100 m " 'Hlavička
                          ActiveSheet.Cells(2, 1).Value = score100 ' Zapíše bodový výsledek na danou pozici
                          MsgBox "Bodová hodnota  za čas: " & sto & "  je  " & score100, , "Bodová hodnota za 100m" ' Vypsání bodů
                  End If
                  Next I
          End If

          Else


          MsgBox "Nebylo zadano cislo" 'JK Informace ze nebylo zadano cislo
    End If

End Sub
 
Nahoru Odpovědět
18.12.2017 20:08
Avatar
Jiri Krček
Člen
Avatar
Odpovídá na JK CZ
Jiri Krček:18.12.2017 20:17

Už to sice neháže chybu, ale ať zadám jakékoliv číslo tak to napíše ten poslední MsgBox: Nebylo zadano cislo

 
Nahoru Odpovědět
18.12.2017 20:17
Avatar
JK CZ
Člen
Avatar
Odpovídá na Jiri Krček
JK CZ:18.12.2017 20:53

Zkusil jsi i cele? Problem muze byt i tecka a carka...

 
Nahoru Odpovědět
18.12.2017 20:53
Avatar
JK CZ
Člen
Avatar
Odpovídá na JK CZ
JK CZ:18.12.2017 21:00

Kdyz tak nahrad tecku carkou, hned za vstupem:
strInp = InputBox("...

strInp = Replace(strInp, ".", ",")  'JK Nahrazeni tecky carkou
 
Nahoru Odpovědět
18.12.2017 21:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.