Der er flere ting:
Når du erklærer variable som "Dim arkaisk1, arkmglub1, udkol1, ..." bliver alle "Variants".
Brug i stedet at erklære dem, som det, de skal bruges til:
dim Heltal as integer
dim TextVar as string
dim Decimaltal as double , osv.
På den måde får du fejl-meddellelser, hvis din kode prøver at "proppe" tekst i en integer-variable.
En variant er ligeglad med, hvad den modtager og "indretter sig" bare efter input. Dette kan være fint - nogle gange - men så skal du erklære den med "dim Ligeglad as Variant".
Det næste - og det du spørger til:
Når du opretter en textbox, så er dét, du skriver i den tekst (string). Hvis du f.eks. gør dette:
dim Tal as integer
Tal = 5
Textbox1.value=Tal
...så bliver indholder i textbox'en altså stadig til "5" (string)
Når du så prøver det modsatte:
Tal = Textbox1.value
...så prøver du pricipielt at lægge "5" over i en integer-variable (heltal), hvilket du ikke må!
Men fordi, at VBA prøver at konvertere "5" til 5, går det tit og ofte alligevel.
Havde du i stedet for "5" skrevet "B", vil du få en fejl, da "B" ikke kan konverteres til et tal.
Når du ikke erklærer dine variable (alle bliver Variants), får du ingen fejl, men du aner ikke hvad der står i variablen. Fejlen viser sig måske først på et senere tidspunkt, når du runtime skal lave en beregning - f.eks. 5 * 5. Her vil 5 * "B" give en fejl!.
Derfor kunne man gøre dette:
Dim Heltal as integer
If IsNumeric(textbox1.value) = true then
'Indholdet i textbox'en er et tal (heltal/decimal)
if cdbl(textbox1.value)=int(cdbl(textbox1.value)) then
'Værdien som decimaltal er det samme som heltals-delen - altså er textbox- 'indholdet et heltal
Heltal = cint(Textbox1.value) 'Her konverteres string til integer (og det gå godt
endif
endif
Koden viser pricippet i at håndtere tal, men...
Koden tager ikke højde for, at der IKKE er indtastet et heltal, så hvad så?
Det kunne f.eks. gøres på denne måde:
On Error Goto IkkeHeltal 'Break on error slås fra, fordi det håndteres i koden
Heltal = cint(Textbox1.value)
Goto IngenFejl
IkkeHeltal:
'Denne kode køres, hvis indtastning ikke er heltal:
msgbox "Der er indtastet en forkert værdi"
exit sub
IngenFejl:
'Koden køres, hvis der blev indtastet et heltal:
On Error Goto 0 'Break on error slås til igen
Håber, at det giver lidt mening - det blev en lang smøre! :-)