Vaša knjiga-pomoč

Pomoč pri delu z MS Excelom
Odgovori
missy
Prispevkov: 40
Pridružen: To Apr 11, 2006 7:03 pm

Vaša knjiga-pomoč

Odgovor Napisal/-a missy »

Prosila bi vas če mi lahko pomaga te pri naslednjem problemu: VBA se učim iz vaše knjige, ki je mimo grede odlična, vendar pa se mi je zataknilo pri neki vaji na strani 82, kjer predlagate, da naj sami popravimo makro za preverjanje matematičnega znanja!

Uporabnika ne smemo več spraševati po številu zaželjenih vprašanj, temveč mu nova postavljamo dokler ne odgovori konec. Končamo zanko in izpišemo rezultat.

Mislim da sem to z zanko rešilal, vendar pa mi ne izpiše rezultata na koncu! Ker pa se že nekaj časa ubadam s tem problemov bi vas prosila če mi poveste kje sem naredila napako!

Moja koda je nasledja:
p.s. ne vem če je prav kako sem rešila to da mi šteje koliko vprašanj je bilo rešenih!

Sub mat()

Dim st1 As Integer
Dim st2 As Integer
Dim odgovor As String

Randomize

Dim odstotek As Single
Dim pravilnih As Integer
Dim sporocilo As String
Dim n As Integer
pravilnih = 0

While odgovor <> "konec"
st1 = CInt((100 * Rnd) + 1)
st2 = CInt((100 * Rnd) + 1)

odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")

n = CInt(odgovor) + 1
If (CInt(odgovor) = (st1 + st2)) Then
MsgBox ("odgovor je pravilen!")
pravilnih = pravilnih + 1
Else
MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))

End If
Wend

odstotek = ((pravilnih * 100) / n)

sporocilo = "Izmed " & vseh & " vprašanj ste pravilno odgovorili na " & pravilnih & " vprašanj! " & "To je ocena "

Select Case odstotek
Case Is < 60
MsgBox (sporocilo & "ena!")
Case Is < 70
MsgBox (sporocilo & "dva!")
Case Is < 85
MsgBox (sporocilo & "tri!")
Case Is < 95
MsgBox (sporocilo & "štiri!")
Case Else
MsgBox (sporocilo & "pet!")
End Select


End Sub


Morda je prav problem v tem štetju teh poskusov!

Že vnaprej se vam zahvaljujem za pomoč!
Lp, missy.
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Kodo sem vam popravil in dodal ustrezne opombe. Toda koda, ki je napisana spodaj še vedno ne bo delovala povsem pravilno, ker je problem še v zanki, zato si preberite še razlago spodaj:

Koda: Izberi vse

Sub mat()
  Dim st1 As Integer
  Dim st2 As Integer
  Dim odgovor As String

  Randomize

  Dim odstotek As Single
  Dim pravilnih As Integer
  Dim sporocilo As String
  ' to bo števec vseh vprašanj zato ga tako tudi poimenujte Dim n As Integer
  Dim vseh As Integer
  
  pravilnih = 0

  While odgovor <> "konec"
    st1 = CInt((100 * Rnd) + 1)
    st2 = CInt((100 * Rnd) + 1)

    odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")

    ' število vprašanj nima popolnoma nobene zveze z odgovorom
    'n = CInt(odgovor) + 1
    ' postavili smo novo vprašanje zato moramo povečati števec vseh vprašanj!
    vseh = vseh + 1
    If (CInt(odgovor) = (st1 + st2)) Then
      MsgBox ("odgovor je pravilen!")
      pravilnih = pravilnih + 1
    Else
      MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))
    End If
  Wend

  ' odstotek izračunamo iz števila vseh vprašanj
  'odstotek = ((pravilnih * 100) / n)
  odstotek = ((pravilnih * 100) / vseh)

  sporocilo = "Izmed " & vseh & " vprašanj ste pravilno odgovorili na " & pravilnih & " vprašanj! " & "To je ocena "

  Select Case odstotek
    Case Is < 60
      MsgBox (sporocilo & "ena!")
    Case Is < 70
      MsgBox (sporocilo & "dva!")
    Case Is < 85
      MsgBox (sporocilo & "tri!")
    Case Is < 95
      MsgBox (sporocilo & "štiri!")
    Case Else
      MsgBox (sporocilo & "pet!")
  End Select
End Sub
Problem, ki se pojavi v tej kodi je v zanki, saj uporabnik v nekem trenutku lahko odgovori z nečim kar ni število ('Konec' ni število) in zato pri preverjanju pravilnosti rezultata stvar klavrno "crkne". V zanko je zatorej potrebno dodati še vprašanje, ali je uporabnik sploh vnesel številko. V spodnji kodi je zapisana samo koda zanke, ki jo ustrezno pač vstavite v gornjo kodo:

Koda: Izberi vse

  While odgovor <> "konec"
    st1 = CInt((100 * Rnd) + 1)
    st2 = CInt((100 * Rnd) + 1)

    odgovor = InputBox(CStr(st1) & "+" & CStr(st2) & "=", "Malo matematike")
    vseh = vseh + 1
    
    ' preverjanje pravilnosti rezultata izvajamo SAMO, če je uporabnik vnesel številko
    If (IsNumeric(odgovor)) Then
      ' število vprašanj nima popolnoma nobene zveze z odgovorom
      'n = CInt(odgovor) + 1
      ' postavili smo novo vprašanje zato moramo povečati števec vseh vprašanj!
      If (CInt(odgovor) = (st1 + st2)) Then
        MsgBox ("odgovor je pravilen!")
        pravilnih = pravilnih + 1
      Else
        MsgBox ("Napačen odgovor!!!" & CStr(st1) & "+" & CStr(st2) & "=" & CStr(st1 + st2))
      End If
    End If
  Wend
lp,
Matjaž Prtenjak
Administrator
missy
Prispevkov: 40
Pridružen: To Apr 11, 2006 7:03 pm

Odgovor Napisal/-a missy »

Hvala za tako hiter odgovor!

Sem popravila in mi dela ok! Razen tega da mi je štel tudi "konec" za poskus, vendar sem to z lahkoto odpravila z enim if stavkom, tako da mi zdaj dela tako kot je treba! :D

Še enkrat najlepša hvala in lep dan še naprej!
missy
Odgovori