Avatar billede target Nybegynder
02. januar 2004 - 16:38 Der 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?
Avatar billede tfa_dk Nybegynder
02. januar 2004 - 18:17 #1
Mener du en tabel med 34 felter (i posten), hvor hvert felt kan antage værdien 0..4?
Avatar billede target Nybegynder
02. januar 2004 - 18:20 #2
Lige præcis. Jeg har en tabel, med en masse poster i. I hver post er der 34 svar, med en værdi af 1-4 (0-4)
Avatar billede tfa_dk Nybegynder
02. januar 2004 - 18:33 #3
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.
Avatar billede target Nybegynder
02. januar 2004 - 18:38 #4
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
Avatar billede tfa_dk Nybegynder
02. januar 2004 - 18:49 #5
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 tror de du ønsker er noget lignende:

Spørgsmål Besvarelse "0" "1" "2" "3" "4"
sp1      1          20  1  7  2  4
sp1      2            0  7  8  5  14
sp2      10          10  10  10  2  2
Avatar billede target Nybegynder
02. januar 2004 - 18:51 #6
Ja, det ligner noget jeg kunne bruge. :)
Men hvordan får jeg den til at gøre sådan?
Avatar billede tfa_dk Nybegynder
03. januar 2004 - 15:47 #7
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
       
    Next i
    countFields = ic

End Function
Avatar billede target Nybegynder
03. januar 2004 - 17:13 #8
Det prøver jeg lige med det samme.
Avatar billede target Nybegynder
03. januar 2004 - 17:34 #9
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.
Avatar billede target Nybegynder
03. januar 2004 - 17:35 #10
Nej, min fejl. Det virker som det skal. mange tak du.
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
Kurser inden for grundlæggende programmering

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