webForumDet fria alternativet

Detta borde ju vara enkelt.....

.NET

3 svar · 242 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag försöker bara en enkel sak:


   a = Mid(sKolla, 1, 1)
   a = a * 2
If Len(a) > 1 Then
    a = Left(a, 1) + Right(a, 1)
Else
    a = a
End If
Me![lTest].Caption = a

Meningen är att den skall plocka ut den första siffran från en textbox, gånga den med två. Är LEN den större än 1 så skall den vänstra siffran plussas till den högra.
Det borde ju fungera med min kod, men det gör inte det. Om den första siffran är sex, så skulle ju a vara lika med 3(6 ' 2 = 12 1 + 2 = 3)
Men jag får a till 12.
Var liger felet?

------------------
saw
__
https://www.mp3.com/saw_songer
_
_

Medlem sedan maj 20018 027 inlägg
#2

Du blandar ihop datatyper. Mid ger dig en String. Att den funkar i a=a*2 beror nog på lite automatiska typkonverteringar som VB så gärna brukar göra. Det är nog därför som du kan använda även Len(), Left() och Right() på a. Dessa metoder verkar egentligen på strängar. Left() och Right() returnerar för övrigt strängar, i ditt fall "1" och "2". +-tecknet har sedan gammalt i VB-sammanhang använts för att lägga ihop stränginnehåll enligt nedan:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">String str

str = "abc" + "def"

-> nu är str = "abcdef"Därav följer att "1" + "2" = "12". Om du på en sträng använder CDbl(str) får du en Double (flyttal). Med CInt eller CLng får du heltal (Integer resp Long). Deklarera alla variabler och ange deras datatyper. Då slipper du den här typen av förvirring.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.
Medlem sedan mars 20011 880 inlägg
#3

Tack det fungerar bra, men nu kom en annan sak med i bilden.
Om man i textrutan har skrivit in en 0:a så får jag felmedelande nr 13 (inkompatibla typer).
Skriver jag On Error Resume Next, så försvinner det, men så vill jag ju inte ha det.
Så här ser koden ut:

Dim sKolla, txtFörsta, txtSista, lVisa
If Len(Me![txtFörsta]) <> 0 And Len(Me![txtSista]) <> 0 Then
'On Error Resume Next
'Me!lVisa.Caption = ""
'Me!lTest.Caption = ""
sKolla = Me![txtFörsta] & Me![txtSista]
Me![lVisa].Caption = "Beräkna sista siffran efter personnummer: " & sKolla

Dim a, b, c, d, e, f, g, h, i, sa
   a = CInt(Mid(sKolla, 1, 1))
   a = a * 2
If Len(a) > 1 Then
    a = CInt(Left(a, 1)) + CInt(Right(a, 1))
Else
    a = CInt(a)
End If
'Me![lTest].Caption = a

    b = CInt(Mid(sKolla, 2, 1))
'Me![lTest].Caption = b

c = CInt(Mid(sKolla, 3, 1))
   c = c * 2
If Len(c) > 1 Then
    c = CInt(Left(c, 1)) + CInt(Right(c, 1))
Else
    c = CInt(c)
End If
'Me![lTest].Caption = c

   d = CInt(Mid(sKolla, 4, 1))
'    Me![lTest].Caption = d

e = CInt(Mid(sKolla, 5, 1))
   e = e * 2
If Len(e) > 1 Then
    e = CInt(Left(e, 1)) + CInt(Right(e, 1))
Else
    e = CInt(e)
End If
 ' Me![lTest].Caption = e

    f = CInt(Mid(sKolla, 6, 1))
'Me![lTest].Caption = f

g = CInt(Mid(sKolla, 7, 1))
   g = g * 2
If Len(g) > 1 Then
    g = CInt(Left(g, 1)) + CInt(Right(g, 1))
Else
    g = CInt(g)
End If
'Me![lTest].Caption = g

    h = CInt(Mid(sKolla, 8, 1))
'Me![lTest].Caption = h

i = CInt(Mid(sKolla, 9, 1))
   i = i * 2
If Len(i) > 1 Then
    i = CInt(Left(i, 1)) + CInt(Right(i, 1))
Else
    i = CInt(i)
End If
    sSlut = a + b + c + d + e + f + g + h + i
    sSlut = (CInt(Right(sSlut, 1))) - 10

Me![lTest].Caption = sSlut

Else
'MsgBox "För att kunna beräkna den sista siffran så behöver jag någonting att räkna med...", vbInformation, "Resurshusets Personnummer kontroll"
Me![lVisa].Caption = "Du måste mata in något värde för mig att arbeta med"
End If
'Me![txtFörsta].Value = ""
'Me![txtSista].Value = ""

Tacksam för all hjälp

------------------
saw
__
https://www.mp3.com/saw_songer
_
_

Medlem sedan maj 20018 027 inlägg
#4

När du får ditt felmeddelande, kolla vilken rad exekveringen bryts på. Kolla där vilka datatyper som är inblandade.

En sak till, när du deklarerar variabler, gör då <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Dim strVar As String
Dim intVar As Integer
etc...Då får varje variabel en bestämd datatyp. Visst kan man köra med Variant, men det kräver en del resurser, och som du har fått erfara, kan det lätt uppstå förvirring om vilka datatyper man har att göra med.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.
272 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)