webForumDet fria alternativet

fel i kod

.NET

7 svar · 254 visningar · startad av tarfala

Medlem sedan juli 2000177 inlägg
Frågan#1

vad är fel i följande kod(fungerar inte att summera variablerna,de
hamnar bara efter varann i summa textrutan)???

Option Explicit
Dim barn7 As Integer
Dim barn12 As Integer
Dim ungdom As Integer
Dim vuxen As Integer
Dim summa As Integer

Private Sub cmdbarn12_Click()
barn12 = barn12 + 1
txtbarn12 = barn12 * 30
End Sub

Private Sub cmdbarn7_Click()
barn7 = barn7 + 1
txtbarn7 = barn7 * 0
End Sub

Private Sub cmdsumma_Click()
txtsumma = txtvuxen + txtungdom + txtbarn12 + txtbarn7
End Sub

Private Sub cmdungdom_Click()
ungdom = ungdom + 1
txtungdom = ungdom * 50
End Sub

Private Sub cmdvuxen_Click()
vuxen = vuxen + 1
txtvuxen = vuxen * 80
End Sub

Medlem sedan juni 200032 967 inlägg
#2

Om du hämtar värden från en textruta så behandlas de som strängar. Gör en typkonvertering.

Private Sub cmdsumma_Click() 
txtsumma = CLng(txtvuxen) + CLng(txtungdom) + CLng(txtbarn12) + CLng(txtbarn7) 
End Sub

Jag ser inte riktigt var de värdena kommer ifrån heller, men det kanske inte spelar någon roll.

Mvh,

Medlem sedan juli 2000177 inlägg
#3

tack, fungerar bra om alla variabler får ett värde ,men tex om bara två av variablerna har ett värde, kan man tilldela alla ett startvärde för att undvika fel???

Medlem sedan juni 200032 967 inlägg
#4

Ja, kanske om man använder Iif().

Private Sub cmdsumma_Click() 
txtsumma = IIf(IsNumeric(txtvuxen), CLng(txtvuxen), 0) + IIf(IsNumeric(txtungdom), CLng(txtungdom), 0) + IIf(IsNumeric(txtbarn12), CLng(txtbarn12), 0) + IIf(IsNumeric(txtbarn7), CLng(txtbarn7), 0)
End Sub

Mvh,

Medlem sedan juli 2000177 inlägg
#5

får samma fel i alla fall "runtime error '13' type mismatch"???

Medlem sedan maj 20021 466 inlägg
#6

tarfala skrev:

får samma fel i alla fall "runtime error '13' type mismatch"???

Du får "Type mismatch" eftersom IIf är en vanlig funktion och när man anropar en funktion körs alla argument i funktionen.

Ett sätt är att göra en konverteringsfunktion som kan se ut så här:

Private Function StrToLng(str As String) As Long
    If (IsNumeric(str)) Then
        StrToLng = CLng(str)
    Else
        StrToLng = 0
    End If
End Function

Den används på följande sätt:

txtsumma = StrToLng(txtvuxen) + StrToLng(txtungdom) + StrToLng(txtbarn12) + StrToLng(txtbarn7)
Medlem sedan juni 200032 967 inlägg
#7

Ja, just jäklar!

VB är lite dumt på det sättet ibland. Jag ber om ursäkt om jag ledde in på fel spår. ;)

Mvh,

Medlem sedan juli 2000177 inlägg
#8

vilka klippor det finns på WF

:) många :bire :bire till @nders och marcus E som tack för hjälpen

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)