Hvis du noen gang har hatt behov for å lage en avgrenset liste med felt-/spørringsverdier sammen med annen informasjon fra databasen din, vet du at det i beste fall kan være utfordrende – og en oppgave de fleste tror ikke vil være mulig. Hvis du for eksempel har blitt bedt om å lage en rapport over hvem som var de 5 beste selgerne – i synkende rekkefølge – for hver måned i året, eller de 3 butikkene som var nærmest hver kunde, kan du potensielt sitte igjen med å kjempe med krysstabellspørringer eller manuelt kombinere resultatene utenfor Access. Men med hjelp av litt VBA-kode vil du produsere resultater som følgende på få minutter ...
| jan | John, Sally, Bill |
| Februar | Sally, Adam, John |
| mar | Adam, Sally, Bill |
Det er mange ganger når det ville være nyttig å kunne vise en avgrenset liste med resultater som en del av et større søk – en liste over de tre største kundene for hver selger, de 3 nærmeste butikkene til hver av kundene dine med høyest forbruk. , listen fortsetter.
Slutt å sy rapporten sammen
Selv om det er mer enn mulig å få detaljene for å lage den typen rapporter, vil du vanligvis ende opp med å sette sammen resultatene manuelt utenfor Access som en del av et regneark eller en rapport.
Følgende kode eliminerer behovet for å fikle med søkeresultatene utenfor Access, og vil i stedet tillate deg å produsere den typen resultater vist ovenfor med letthet.
Først, la oss skissere hva vi vil at koden skal kunne gjøre:
"Gi et søk, returner x antall resultater, kombinert til en enkelt streng som er avgrenset med y"
Før vi begynner
Før vi ser på koden, er det viktig å merke seg at selv om det er mulig å lage en VBA-funksjon som er mer generisk og i stand til å håndtere en hvilken som helst søkekombinasjon, vil dette resultere i ganske lang kode, så det vi skal gjøre i denne artikkelen er å definere en eksempelsak og skrive funksjonen for å håndtere den saken. Å gjøre det på denne måten vil gjøre det mye enklere for deg å kunne gjenskape koden for å møte dine spesifikke behov.
Eksempelsaken
Vi har en salgsdatabase som lagrer detaljer om kundekjøp, sammen med produktkategorien som kjøpet tilhører. Vi ønsker å lage en rapport som viser, etter måned, de 3 beste kategoriene i synkende rekkefølge.
For enkelhets skyld holder vi eksemplet til en enkelt tabell, selv om prinsippet vil fungere uavhengig av oppsettet ditt. Tabellen vi skal bruke er satt opp som følger:
| Utsalg |
| Kundenavn |
| Transaksjonsdato |
| Transaksjonsverdi |
| Kategori |
Selvfølgelig er dette et altfor forenklet oppsett, men du skjønner ideen.
Nå – koden
Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
Dim sSql, resultString As String
Dim rst As Recordset
Dim firstLine As Boolean
'Create our SQL string using the supplied parameters
sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
Set rst = CurrentDb.OpenRecordset(sSql)
firstLine = True
'Loop through the results, and create the string to return
With rst
Do While Not .EOF
If Not firstLine Then
resultString = resultString & Delimiter & .Fields("category")
Else
resultString = resultString & .Fields("category")
firstLine = False
End If
.MoveNext
Loop
End With
Set rs = Nothing
CategoryList = resultString
End Function
Koden – forklart

Du vil legge merke til at vi sjekker om vi skal legge til et skilletegn i strengen eller ikke - uten denne kontrollen ville du ende opp med enten en dårlig formatert resultatstreng, eller du må legge til kode for å fjerne uønskede skilletegn - på denne måten holder det pent og ryddig fra første stund.
Selve funksjonen kan selvfølgelig kalles fra en spørring, en rapport, eller hvor som helst du vil fra Access.
Reparer ødelagt tilgangsdatabase
Hvis du møter ødelagte Access-databaser når du kjører koden ovenfor, er det bedre å bruke et spesialverktøy for å reparere dem og gjenopprette alle tabellene fra de korrupte databasene.
Forfatterintroduksjon:
Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparere SQL-problem og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med