anoniem Geplaatst: 20 juni 2006 Delen Geplaatst: 20 juni 2006 Ik heb een volgende stukje code geschreven [code:1:97bd71d4b2] Dim lineprice as Currency ' volgende stukje staat in een for lus lineprice = begincell.Offset(i, 1) [/code:1:97bd71d4b2] Ik krijg als foutmelding runtime error 13 TypMismatch ter wel de waarde 0.10 is van de cell Quote Link naar reactie
anoniem Geplaatst: 20 juni 2006 Auteur Delen Geplaatst: 20 juni 2006 Je code klopt niet. Deze regel:[code:1:b765d58e47]lineprice = begincell.Offset(i, 1) [/code:1:b765d58e47] probeert in de variabele lineprice (type Currency) een object van het type Range te stoppen. Dat is dus een Type mismatch ;) Wat je zou moeten doen is dit:[code:1:b765d58e47]lineprice = begincell.Offset(i, 1).Value[/code:1:b765d58e47] Quote Link naar reactie
anoniem Geplaatst: 21 juni 2006 Auteur Delen Geplaatst: 21 juni 2006 OKe bedankt, toch nog een vraagje, indien je een integer of String gebruikt werkt het wel. Wat is daar de reden voor? Quote Link naar reactie
anoniem Geplaatst: 21 juni 2006 Auteur Delen Geplaatst: 21 juni 2006 [quote:13416544b2="bertjedeb"]OKe bedankt, toch nog een vraagje, indien je een integer of String gebruikt werkt het wel. Wat is daar de reden voor?[/quote:13416544b2] Ik heb nog even wat zitten testen, maar als het goed is, zouden alle drie de mogelijkheden (string, integer en currency) geen problemen mogen opleveren. Met dien verstande dat een integer natuurlijk altijd wordt afgerond. Waarschijnlijk komt je code dus een veld tegen met een waarde waar het op vastloopt. Waardoor dat komt, kan ik je zo niet zeggen, daar zou ik de waardes voor moeten zien. Quote Link naar reactie
anoniem Geplaatst: 22 juni 2006 Auteur Delen Geplaatst: 22 juni 2006 Ik had mijn vraag denk ik niet goed geformuleerd. De macro werkt nu omdat ik offset( x, y).value gebruik. Maar ik heb nu ff snel een andere Macro geschreven zie code: [code:1:913286a346] Private Sub CommandButton1_Click() Dim range1, range2, returnrange As Range Dim intreturn, temp, i As Integer Dim doublereturn, tempdouble As Double Set range1 = Range("C2") Set range2 = Range("D2") For i = 0 To 7 Step 1 temp = range1.Offset(i, 0) intreturn = intreturn + temp tempdouble = range2.Offset(i, 0) doublereturn = doublereturn + tempdouble range1.Offset(i, 2) = intreturn range2.Offset(i, 2) = doublereturn Next End Sub [/code:1:913286a346] deze werkt gewoon zonder value te gebruiken. enig idee hoe dat kan niet echt structureel het programeren in VBA. Quote Link naar reactie
anoniem Geplaatst: 22 juni 2006 Auteur Delen Geplaatst: 22 juni 2006 [quote:72de2f037f="bertjedeb"]Ik had mijn vraag denk ik niet goed geformuleerd. De macro werkt nu omdat ik offset( x, y).value gebruik. Maar ik heb nu ff snel een andere Macro geschreven zie code: [code:1:72de2f037f] Private Sub CommandButton1_Click() Dim range1, range2, returnrange As Range Dim intreturn, temp, i As Integer Dim doublereturn, tempdouble As Double Set range1 = Range("C2") Set range2 = Range("D2") For i = 0 To 7 Step 1 temp = range1.Offset(i, 0) intreturn = intreturn + temp tempdouble = range2.Offset(i, 0) doublereturn = doublereturn + tempdouble range1.Offset(i, 2) = intreturn range2.Offset(i, 2) = doublereturn Next End Sub [/code:1:72de2f037f] deze werkt gewoon zonder value te gebruiken. enig idee hoe dat kan niet echt structureel het programeren in VBA.[/quote:72de2f037f] Volgens mij is Value de default property van een een range-object, want dat krijg je terug wanneer je de offset aanroept. Een default property hoef je niet expliciet te coderen. Bij een Textbox is Text de default property, dus daar hoef je Text ook niet te gebruiken als je de waarde van die textbox wilt weten. En VBA is inderdaad niet echt een taal die je dwingt om gestructureerd te programmeren. Maar goed, het is ook voornamelijk bedoeld om Officetaken te automatiseren. Oh ja, nog een ding over jouw code: ik neem aan dat je range1 en range2 als Range wilde declareren? Dat is nu namelijk niet het geval: range1 en range2 zijn in jouw code van het type Variant. Waar je in andere talen een reeks variabelen tegelijk als een bepaald DataType kan declareren, daar moet je dat in VB(A) per variabele doen. Dus niet: [code:1:72de2f037f] Dim range1, range2, returnrange As Range [/code:1:72de2f037f] maar [code:1:72de2f037f] Dim range1 as Range, range2 as Range, returnrange As Range [/code:1:72de2f037f] Maakt voor je code niks uit, maar voor het geheugengebruik wel. Een variant neemt altijd de meeste bytes in. Quote Link naar reactie
anoniem Geplaatst: 23 juni 2006 Auteur Delen Geplaatst: 23 juni 2006 Indien je een Integer gebruikt moet je dat dan ook doen? Dus niet maar: [code:1:c1959c8dcd] Dim a, b, c As Integer [/code:1:c1959c8dcd] Maar: [code:1:c1959c8dcd] Dim a As Integer, b As Integer, c As Integer [/code:1:c1959c8dcd] Quote Link naar reactie
anoniem Geplaatst: 23 juni 2006 Auteur Delen Geplaatst: 23 juni 2006 [quote:5c6aacc21c="bertjedeb"]Indien je een Integer gebruikt moet je dat dan ook doen? [/quote:5c6aacc21c]Yep. Je moet in VBA altijd iedere variabele expliciet declareren, anders wordt het een Variant. Voor de werking maakt het niks uit, het is dus vooral netjes en voor het geheugengebruik. Alhoewel, volgens mij moet je een flinke VBA applicatie schrijven voordat je er last van krijgt ;) Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen