Avatar billede martpe Nybegynder
14. september 2011 - 11:14 Der er 8 kommentarer og
1 løsning

VBA: "error 6 overflow"

Jeg skal til en graf anvende et/flere binært tal.
Jeg er i denne forbindelse udfordret på en fejlmeldning i VBA på overflow error 6. Jeg oplever ingen problemer, når jeg fx vil gange de to tal, men ved brugen af AND, så går det galt.
Har forsøgt at læse lidt fra tidligere lign. spørgsmål, men er ikke kommet i hus udover at det måske er noget med 32bit er maks og jeg kommer over 32 bit her (og jeg er altså ingenlunde programmeringsekspert)

Min kode ser således ud:

Dim var1 As Double
Dim var2 As Double
Dim var3 As Double
Dim Antal As Integer


Sub Binært_tal()


Antal = Cells(1, 8)

For J = 1 To Antal

var1 = 2 ^ 32
var2 = 2 ^ 30

var3 = var1 And var2

Cells(J, 3) = var3

Next J

End Sub


Nogle, der kan hjælpe mig videre?
Avatar billede Ialocin Novice
14. september 2011 - 13:47 #1
Hej martpe

Hvad er det, at Antal = Cells(1, 8) gør ?


Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
14. september 2011 - 13:55 #2
Hej martpe

Og hvad er skal variablerne var1 og var 2 i linien:
var3 = var1 And var2 ... udover "OG" ... skal der ikke ske en form for regneaktion ??

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
14. september 2011 - 14:07 #3
Hej martpe

Hvis der i celle cells(1,8) (celle H1) eksempelvis står tallet 3 ?
Og hvis du bytter dit AND i fjerdesidste linie ud med +, så vil resultatet af din kode være, at cellerne C1, C2 og C3 får tildelt værdien 5368709120 ... hvilket er summen af 2^32 + 2^30.

Din tilrettede kode, hvor AND er byttet ud med +:

Sub Binært_tal()


Antal = Cells(1, 8)

For J = 1 To Antal

var1 = 2 ^ 32
var2 = 2 ^ 30

var3 = var1 + var2

Cells(J, 3) = var3

Next J

End Sub



Ved ikke om det var tænkt sådan ??

Med venlig hilsen
Avatar billede martpe Nybegynder
14. september 2011 - 14:24 #4
Ikke helt. Jeg havde egentlig bare prøvet af lave koden simplerede, da problemet alene drejer sig om et problem på tallets størrelse:


Sub Bin()

Antal = Cells(1, 8) (dette er bare antallet gange af løkken,fx 3)

For J = 1 To Antal

var1 = Cells(J, 1)
var2 = Cells(J, 2)

var3 = var1 And var2

Cells(J, 3) = var3

Next J

End Sub

Sålænge i kolonnerne A(1..3) og B(1..3) har små tal, så kører det fint. Men såsnart jeg kommer over 2^32 så går det galt.
Avatar billede Ialocin Novice
14. september 2011 - 20:41 #5
Hej martpe

Du må undskylde, men jeg kan ikke se/forstå hvad
var3 = var1 And var2 gør... skal der ikke ske en form for beregning ??

Med venlig hilsen, Nicolai
Avatar billede martpe Nybegynder
15. september 2011 - 09:00 #6
AND fungerer, som et bit wise and...
Det kan nok næsten bedst forstås ved eksemplerne nedenfor.

Binært for 8  er jo 1000
Binært for 10 er jo 1010

Derved bliver AND  1000, altså 8 (her er cifre 4 begge 1'ere)

Binært for 2  er jo 10
Binært for 4 er jo 100

Derved bliver AND  000, altså 0 (her er ingen cifre begge 1'ere)

Binært for 10  er jo 1010
Binært for 18 er jo 10010

Derved bliver AND  00010, altså 2 (her er 2. cifre begge 1)


Binært for 19  er jo 10011
Binært for 11 er jo  1011

Derved bliver AND    00011, altså 3 (her er 1. og 2. cifre begge 1)

Håber det kan forstås. Problemet er bare, at den kun kan klare det op til tallet 2^32 minus 1. Så kan funktionen ikke håndteres herefter uden overflow...
Avatar billede Ialocin Novice
15. september 2011 - 10:42 #7
Hej martpe

Tak for info :o)
Med hensyn til dit spørgsmål kan jeg så nu sige, at min hjerne har overflow :o) ... Jeg aner intet om bit og bytes, desværre.

Håber du får løst dit problem.

Med venlig hilsen, Nicolai
Avatar billede martpe Nybegynder
15. september 2011 - 12:19 #8
Hehe, tja - det giver også overflow her :o)
Men Tak for for forsøget...!!
Avatar billede martpe Nybegynder
19. september 2011 - 09:29 #9
Lukning af spørgsmål
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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