04. marts 2002 - 13:14Der er
23 kommentarer og 2 løsninger
Nok mest terry og thomasjepsen
For lang tid siden hjalp i med følgende eankode beregning. Men efter en mindre ændring af koden er der nu opstået en fejl i afrundingsdelen. Der skal rundet OP til nærmeste hele 10er:
Koden er således: Me![type_beregn] = DLookup("[ean_type]", "type", "[Autonummer]=" & Me![Type_Opslag])
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg har ændret Dim eandkx1 as single, her stod der eandket før - og det gav tilsyneladende en dobbelt værdi! - men jeg er i tvivl om, hvorvidt det er det rigtigt sted jeg har ændret i resten af koden, håber i har tid til at hjælpe hurtigt!
Øh, jeg er ikke helt med på hvad du vil, men nedenstående funktion afrunder alle tal til det tal du angiver:
Public Function Afrund(Tal As Single, Optional Nærmeste As Long = 1, Optional RundOp As Boolean = True) If Nærmeste = 1 Then Afrund = Int(Tal + IIf(RundOp = True, 1, 0)) Else Afrund = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste End If End Function
Ek: Afrund([Tal], 10, true) afrunder op til nærmeste 10'er.
cgleerup>what is the actual problem? are you saying that eandket was declared twice and you altered the local to eandkx1, and since doing that you ae not sure if you have altered correctly?
If you send me th eprogram I will take a look this evening and see if I can can see what is happening, but I cant see from here
Ja det er præcis det jeg mener, af en eller anden grund havde jeg en dublikeret værdi, så ændrere jeg på terrys anbefaling denne variabel ting -Dim eandket as single til dim eandkx1 as single - men så skulle det resterende kode jo også ændres på de steder hvor den reffererede til eandkx1 og jeg er ikke sikker på at jeg har rette det de rigtige steder!
Lige nu kommer der INGEN fejl - som meddelelser, men den runder tilsynelande forkert af - i hvertfald har jeg fået nogel forkerte resultater hvor den har rundet til 0 i stedet for til 10
You are more than likely refering to this question http://www.eksperten.dk/spm/177871 where I suggested yuo should move the declarations to the start of the procedure! I never did find out what the actual problem was though, and I still dont know whatit is now. It isnt always easy to find a problem just looking at code, sometimes it is necessary to have HANDS ON and debug through the code.
Jeg fandt også lige ud af, at der var en mindre fejl i Afrund-koden, som gjorde at 0 blev afrundet til 10 :o(
Prøv med denne i stedet:
Public Function Afrund(Tal As Single, Optional Nærmeste As Long = 1, Optional RundOp As Boolean = True) If Nærmeste = 1 Then Afrund = Int(Tal + IIf(RundOp = True, 1, 0)) Else If Int(Tal / Nærmeste) = Tal / Nærmeste Then Afrund = Tal Else Afrund = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste End If End If End Function
I feltet eankode_beregn ligger tallet 540610235554, udfra dette tal skal jeg beregne et checkciffer - dette gøres på følgende måde hverandet tal vægtes med 1 og hvertandet med 3 - således 1-3-1-3-1-3-1-3- osv. når dette er gjort rundes tallet op til nærmeste hele tal, dividerbart med 10 eksempelvis skal 174 rundes op til 180.
Gøres dette har man således 180 og trækker så 174 fra det giver et checkciffer på 6 dette sættes i rumpen af det tal vi have i feltet eankode_beregn. Resultatet af hele denne udregning skal så placeres i feltet eandk
Hvis dette kan gøres på en nemmere måde er det også en løsning, men jeg skal gerne bruge en rimelig god forklarring - der gives gerne et par ekstra point for en hurtig brugbar løsning!
jeg har koden der beregner 174 og placere dette tal i eandket men mangler den der kan siger at eandkto skal være lig med eandkto rundetop til nærmeste hele tal dividerbart med 10!
Jeg ved ikke om jeg er på rette spor, men nedestående kode beregner eandket: Public Function Beregn_eandket(eankode_beregn As String) Dim n As Integer Dim CheckSum As Long For n = 1 To Len(eankode_beregn) If n Mod 2 = 0 Then CheckSum = CheckSum + Mid(eankode_beregn, n, 1) * 3 Else CheckSum = CheckSum + Mid(eankode_beregn, n, 1) End If Next n Beregn_eandket = CheckSum End Function
Derved kan du sige: Me!eandket = Beregn_eandket(Me!eandk_beregn) Me!eandkto = Afrund(Me!eandkto, 10, true)
Jeg fik løst problemet efter adskillige timer med stærk kaffe, så omkring klokken 03.00 natten til idag lykkedes det mig at nå hertil - og faktisk er det jo logisk.
Men i har ydet en ihærdig indsats! og det giver naturligvis point for SVAR
Synes godt om
Ny brugerNybegynder
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.