02. januar 2004 - 16:38Der er
9 kommentarer og 1 løsning
Access VBA Sammentælling af værdier og derefter udskrive dem
Jeg sidder med en database hvor der i hver post er 34 svar. Disse svar er i databasen enten angivet med 1, 2, 3 eller 4. Eller 0 hvis spørgsmålet ikke er besvaret. Det jeg skal nu er, at jeg skal tælle sammen hvor mange af de 34 spørgsmål der er svaret 1 til, hvor mange der er svaret 2 til osv. Hvodan tæller jeg dette sammen, samt for det udskrevet i min rapport?
Skal der tælles sammen pr. post, således at hver post giver en afledt post med 5 nye felter. Eller kun en afledt post for alle rækker?
Du kunne lave en ny tabel med 5 felter en for hver værdi 0..4 og tælle disse op pr post i den oprindelige tabel. Du skal selvfølgelig have nogle nøglefelter med for at kunne se hvor tallene kommer fra.
Alternativt kan du bruge UNION, med det kræver så 34 af slagsen og om Access kan det ved jeg ikke. Den nye UNION forespørgsel skal du så bruge i en krydstabulering.
Sammentællingen skal ikke ind i en anden tabel eller noget. bare skrives ud i en rapport. Det jeg skal have er, at når åbner min rapport for f.eks. skema 57, så skal den hente svarene fra databasen, og tælle sammen hvor mange af spørgsmålene der er svaret 1 til, hvor der er svaret 2 til osv. og så skrive antallet i rapporten
Den nemmeste løsning er 1 - 2 vba funktioner som optæller værdierne direkte i rapporten hvis de alligevel ikke skal bruges andre steder og der skal komme et sæt værdier pr. eksisterende post.
Jeg har lavet en funktion der kan gøre arbejdet, men løsningen er ikke smuk. For at dette virker skal du flytte alle 34 felter til din rapport (Nu ikke noget vrøvl her, jeg kunne ikke gøre det på andre måder). Disse 34 felter egenskab synlig skal sættes til nej. Disse 34 kontroller skal navngives f.eks. "Svar1", "Svar2" .. "Svar34" altså navne med fortløbende nummer.
For at kunne vise antal svar værdier opretter nu 5 kontroller af typen tekstboks. Deres egenskab kontrolelementkilde sættes til "=countFields(x)" hvor x skal være en af værdierne 0 .. 4, svarende til udfaldet i dine svar.
Så skulle du have alt hvad løsningen kræver.
Private Function countFields(pt As Integer) ' pt værdien der ledes efter
Dim i As Integer ' Nummer på aktuelle kontrolelement Dim ctl As Control ' Holder aktuelle kontrolelement Dim ic As Integer ' Antal kontrolelementer med værdien pt.
For i = 1 To 34 ' Antal kontrolelementer Set ctl = Me.Controls("Svar" & i) ' Navnet på kontrolelementer med svar. If (ctl.Value = pt) Then ic = ic + 1 End If
Nu har jeg smidt det hele ind i min rapport, men jeg tror ikke den rigtig kan finde ud af den If-sætning... den skriver 34 i alle resultaterne... dvs. den tæller op, uanset om værdien er det den skal være, eller ej.
Nej, min fejl. Det virker som det skal. mange tak du.
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.