Avatar billede Slettet bruger
25. november 2003 - 21:25 Der er 20 kommentarer og
2 løsninger

Hurtig Hjælp (nem)

Hvad er der galt her? den skal opdatere mit "resultat" felt!

Private Sub Beregncmd_Click()
Dim x1 As String
Dim x2 As String



If x1 = "" And x2 = "" Then
  GoTo 10
End If
x1 x2 = resultat


10
End Sub
Avatar billede joern Nybegynder
25. november 2003 - 21:31 #1
Hej. 

Du kan ikke udføre beregninger med strenge, det skal være tal-variable
Integer  - Long  - Single  eller Double  afhængig af størrelse og evt. decimaler.

Efter en label skal der være et kolon.

For at multiplicere to tal-variable skal der være en operator:  *

Private Sub Beregncmd_Click()
Dim x1, x2 , resultat As Long
If x1 = 0 And x2 = 0 Then  GoTo 10
x1 * x2 = resultat
10:
End Sub
Avatar billede joern Nybegynder
25. november 2003 - 21:32 #2
Hej - om igen - jeg slugte din 'and'

Private Sub Beregncmd_Click()
Dim x1, x2 , resultat As Long
If x1 = 0 then
if x2 = 0 Then GoTo 10
End If
x1 * x2 = resultat
10:
End Sub
Avatar billede squashguy Nybegynder
25. november 2003 - 21:42 #3
If Not (x1=0 Or x2=0) Then
  resultat = x1*x2
End If
Avatar billede Slettet bruger
25. november 2003 - 21:51 #4
virker stadig ikke..
Avatar billede Slettet bruger
25. november 2003 - 21:53 #5
den vil heller ikke lige skrive plus.. men det er + ikke gange!
Avatar billede Slettet bruger
25. november 2003 - 21:54 #6
inspriantionen er fra

Private Sub Beregncmd_Click()
x = xtxt.Text
y = ytxt.Text
If x = "" And y = "" Then
  GoTo 10
End If
If x = "" Then
  x = y / 2 - 5
Else
  y = 2 * x + 5
End If
  ytxt.Text = y
  xtxt.Text = x

10
End Sub
Avatar billede joern Nybegynder
25. november 2003 - 22:08 #7
Hej.

I mit eksempel tildeles variablen resultat indholdet at beregningen.
Hvis feltet hedder resultat skal der selvfølgelig stå:

resultat.text = x1 + x2    'når det nu skal være plus

Held og lykke med at lære at programmere.
M.v.h.  Jørn
Avatar billede Slettet bruger
25. november 2003 - 22:29 #8
jeg får error:

Private Sub Beregncmd_Click()
Dim x1, x2, resultat As Long
If x1 = 0 Then
If x2 = 0 Then GoTo 10
End If
resultat.Text = x1 + x2
10
End Sub
Avatar billede joern Nybegynder
25. november 2003 - 22:46 #9
Hej.

Errors har numre - hvilken?

I VB5 som jeg anvender kan man ikke bruge labels uden at sætte kolon efter.

Private Sub Beregncmd_Click()
Dim x1, x2 As Long
If x1 = 0 Then
  If x2 = 0 Then GoTo 10
End If
resultat.Text = x1 + x2
10:
End Sub

Når der ikke skal udføres noget efter label 10:

Private Sub Beregncmd_Click()
  Dim x1, x2 As Long
    If x1 = 0 Then
      If x2 = 0 Then exit sub
    End If
  resultat.Text = x1 + x2
End Sub

jeg står af for idag. Godnat!
Avatar billede danauktion Nybegynder
25. november 2003 - 23:17 #10
global resultat as long
private sub kodeeksempel_click()
dim x1 as long
dim x2 as long
if (x1=0) and (x2=0) then goto 10
resultat = x1+x2
exit sub
10:
end sub
Avatar billede martin_moth Mester
26. november 2003 - 18:09 #11
Papir: Du roder gevaldigt rundt i det. Du dim'mer resultat som en Long, og skriver resultat.text. Det er vrøvl. Og så forsøger du at lægge strings sammen.

Her et par hints:


Hint 1:

Det en bruger skriver i en textbox (fx. text1.text) er en String. Hvis brugeren skriver "3" opfattes det som "bogstavet 3" og ikke som værdien 3. Hvis du vil udregne sommen af nogle tal der står i nogle textboxe, skal du først omregne teksten til et tal, fx. med funktionen Val
  Reusltat = val(text1.text) + val(text2.text)



Hint 2:

Og at bruge GoTo er en dårlig måde at programmere på, og i din kode kan du sagtens undgå det. Så gør det, for din egen skyld :o)




Hist 3:
Hvis du skriver
  Dim tal1, talt, tal3 as Long
er der KUN tal3 der bliver en Long, resten bliver variant. Skal alle tre være Long, skal du skrive
Dim tal1 as Long
Dim tal2 as Long
Dim tal3 as Long





Hint 4:

Struturen på en IF-sætning er:

If Betingelse Then Handling

eller:

If Betingelse Then
  Handling
End if

men ikke som danauktion skriver:

If betingelse then handling
end if



Hint 5:

http://www.eksperten.dk/kat/5/?searchtype=txt&words=tutorial&method=and&sort=score&catid=5


Held og lykke

:o)
Avatar billede martin_moth Mester
26. november 2003 - 18:10 #12
Sorry - drop Hint 4 - jeg så forkert. Sorry, danauktion
Avatar billede Slettet bruger
26. november 2003 - 22:03 #13
Det virker nu..Tak alle sammen..
Avatar billede martin_moth Mester
26. november 2003 - 22:20 #14
Hint 1 er ret vigtigt at forstå, før du går videre :o)
Avatar billede danauktion Nybegynder
26. november 2003 - 22:22 #15
martin modth>>
Dine hints er alle OK bortset fra hint1: man bør ikke bruge val i nogen som helst sammenhænge, da du aldrig vil få en fejkode retur fra val:
val("a")=0
val(3)=3
val("3,3")=3
Så benyt istedet funktionen int, cint, dbl eller cdbl - dem kan du stole på :-)

Og rent grundlæggende, så burde man istedet benytte en function til løsning af dette problem og ikke en sub, da man så ikke behøver hardcode resultat-feltet i functionen.
Så den rigtige løsning burde se således ud:

function addfunction(x1 as long, x2 as long) as long
if (x1=0) and (x2=0) then
' What to do at previous line 10
  exit function
end if
addfunction = x1+x2
end function
Avatar billede martin_moth Mester
27. november 2003 - 07:22 #16
Kan kun erklære mig enig :o)
Avatar billede joern Nybegynder
27. november 2003 - 07:54 #17
danauktion>>

Jeg har mange steder anvendt 'val' i mine programmer, men jeg lader jo kun noget udføre, når 'val' returnerer et tal.  En del steder tester jeg forinden med IsNumeric.  Hvis de 4 funktioner du omtaler anvendes på andet end tal, skal der så benyttes ErrorHandling for at undgå at programmet standser?

Jeg har lige kigget i hjælpen til min VB5, dér står ikke hvad der sker, hvis funktionen cint anvendes på en streng.

M.v.h.  Jørn
Avatar billede danauktion Nybegynder
27. november 2003 - 08:40 #18
joern>>
Du bør altid have en fejlprocedure i både funktioner og procedurer for at styre eventuelle fejl, som måtte opstå, da programmet ellers vil stoppe og give brugeren af programmet en fejltekst (på engelsk) som brugeren kun vil blive forvirret af - og programmet vil efterfølgende terminere.
Alle string->integer funktionerne (undtagen val) vil give en fejlkode 13 type mismatch hvis input ikke er numerisk af indhold.
De nævnte funktioner vil alle forsøge at typecaste paramtrene som de korrekte typer og vil derfor også kunne akceptere numerisk input - f.eks. vil cint("5") og cint(5) begge give resultatet 5 men en cint("abe") eller cint("5,5") vil begge give en fejl 13, da "abe" er en streng og da "5,5" ikke er et tal i VB, da VB taler engelsk skulle tallet have heddet "5.5" eftersom VB's decimalpoint er et punktum og ikke et komma. Komma er tusindetals seperator på engelsk.

Man kan selvfølgelig benytte en IsNumeric og en efterfølgende Val - det giver samme effekt :-) men hvorfor benytte 2 funktionskald, når man kan nøjes med et ?
Det er meget enklere og mere korrekt at benytte VB's errorhandling (ikke at den er for smart, for det er den ikke), men det giver et væsenlig bedre overblik og struktur på dit program.
Den omtalte funktion kunne i givet fald se således ud:

function addfunction(x1 as long, x2 as long, resultat as long) as integer
on error goto err_handler
'x1 og x2 bliver checket ved funktionskaldet
if (x1=0) and (x2=0) then
' What to do at previous line 10
  addfunction = err.number
  exit function
end if
resultat = x1+x2
addfunction=err.number
end function

Og kaldet til funktionen ville se således ud:

if addfunction(felt1, felt2, myresult) then
  debug.print "Addering gav resultatet " & myresult
else
  debug.print "Der skete en fejl : " & err.number & " " & err.description
end if

Nu udestår så blot det problem, at det kun er brugeren som får denne fejl at se - og han/hun måske ikke fortæller det til udvikleren så derfor vil man i større installationer benytte/have udviklet en Component til at gemme de nødvendige oplysninger om opstående fejl i en database, som driftafdeling/udviklere kan tilgå via et web-interface og på denne måde finde fejl og rette dem - måske endda før brugeren når at fejlmelde dem (!) :-)
Og det vil være noget der rykker!
Avatar billede martin_moth Mester
27. november 2003 - 09:08 #19
Alternativt sikre sig mod enhver form for fejl, ved tilstrækkeligt at tjekke input inden beregninger udføres (gæk gæk)
Avatar billede joern Nybegynder
27. november 2003 - 09:42 #20
Danauktion>>

Mange tak for det fyldige svar.  Jeg prøver mine programmer af med at indtaste 'forkert', så jeg kan se om mine fejlmeddelelser giver mening.  Ingen af mine programmer modtager data som ikke er genereret af det selv eller et andet af mine egne.

Ang. fejlhåndtering.  Kan man 'afstille' en On Error Goto?  Når jeg har indsat en 'On Error', sker det at en fejl 'længere nede' i sub'en udløser en fejl.  Så passer meddelelsen ikke mere.
Jeg opretter gerne et spørgsmål så du kan få nogle point, det fortjener du for ovenstående redegørelse.

M.v.h.  Jørn
Avatar billede danauktion Nybegynder
27. november 2003 - 10:09 #21
joern>>
Du kan de-aktivere en on error goto med en on error resume next (=standard: brugeren får fejlen kastet op i ansigtet) eller en ny on error goto.
Eks.:
function addfunction(x1 as long, x2 as long, y1 as long, y2 as long, resultat as long) as integer

on error goto err_handler_1
'x1 og x2 bliver checket ved funktionskaldet
if (x1=0) and (x2=0) then
' What to do at previous line 10
  addfunction = err.number
  exit function
end if
resultat = x1+x2
' step1 calculations here....
' and more coding wich may raise errors
on error goto err_handler_2
' step2 calculations here....
' and more coding wich may raise errors

addfunction=err.number

exit function
err_handler_1:
addfunction=err.number
exit function

err_handler_2:
addfunction=err.number
exit function

end function


I dette eksempel vil du kunne styre hvilken fejlprocedure som udføres afhængig af hvor i koden at fejlen sker, men vær opmærksom på at om du kalder ned i andre subs/functions fra denne function med errorhandler, så vil du - i fald de underliggende subs/functions ikke har en error handler - fange fejlen hér i denne function.
Hvis du indsætter en On error resume next inaktiveres din On error goto.

Det blev lidt rodet, men jeg håber du forstår hvad jeg forsøgte at sige :-)
mvh
Jesper
Avatar billede spg10 Nybegynder
22. februar 2004 - 12:25 #22
:
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