Wenn Sie schon einmal eine Liste mit Feld-/Abfragewerten und anderen Datenbankinformationen erstellen mussten, wissen Sie, wie schwierig das sein kann – und dass die meisten die Aufgabe für unmöglich halten. Angenommen, Sie sollen einen Bericht erstellen, der die fünf umsatzstärksten Mitarbeiter (in absteigender Reihenfolge) für jeden Monat des Jahres oder die drei nächstgelegenen Filialen für jeden Kunden auflistet. Dann bleibt Ihnen möglicherweise nichts anderes übrig, als mit Kreuztabellen zu arbeiten oder die Ergebnisse außerhalb von Access manuell zusammenzuführen. Doch mit etwas VBA-Code erzielen Sie innerhalb weniger Minuten Ergebnisse wie die folgenden…
| Januar | John, Sally, Bill |
| Februar | Sally, Adam, John |
| März | Adam, Sally, Bill |
Es gibt viele Fälle, in denen es nützlich wäre, eine begrenzte Ergebnisliste als Teil einer größeren Abfrage anzuzeigen - eine Liste der drei größten Kunden für jeden Vertriebsmitarbeiter, die fünf Geschäfte, die jedem Ihrer Kunden mit den höchsten Ausgaben am nächsten liegen , Die Liste geht weiter.
Hören Sie auf, Ihren Bericht zusammenzufügen
Während es mehr als möglich ist, die Details zum Erstellen dieser Art von Bericht abzurufen, müssen Sie die Ergebnisse normalerweise außerhalb von Access als Teil einer Tabelle oder eines Berichts manuell zusammenfügen.
Mit dem folgenden Code müssen Sie nicht mehr mit den Abfrageergebnissen außerhalb von Access herumspielen, sondern können die oben gezeigten Ergebnisse problemlos erstellen.
Lassen Sie uns zunächst skizzieren, was der Code tun soll:
"Geben Sie bei einer Abfrage x Anzahl der Ergebnisse zurück, kombiniert zu einer einzelnen Zeichenfolge, die durch y begrenzt ist."
Bevor wir anfangen
Bevor wir uns den Code ansehen, ist es wichtig zu beachten, dass es zwar möglich ist, eine allgemeinere VBA-Funktion zu erstellen, die jede Abfragekombination verarbeiten kann, dies jedoch zu ziemlich langem Code führen würde. Was wir in diesem Artikel tun werden besteht darin, einen Beispielfall zu definieren und die Funktion zu schreiben, die diesen Fall behandelt. Wenn Sie dies auf diese Weise tun, können Sie den Code viel einfacher neu erstellen, um Ihren spezifischen Anforderungen gerecht zu werden.
Der Beispielfall
Wir haben eine Verkaufsdatenbank, in der Details zu Kundenkäufen sowie die Produktkategorie, zu der der Kauf gehört, gespeichert sind. Wir möchten einen Bericht erstellen, der nach Monat die drei wichtigsten Kategorien in absteigender Reihenfolge anzeigt.
Der Einfachheit halber behalten wir das Beispiel in einer einzigen Tabelle bei, obwohl der Principal unabhängig von Ihrem Setup funktioniert. Die Tabelle, die wir verwenden werden, ist wie folgt aufgebaut:
| Verkauf |
| Kundenname |
| Transaktionsdatum |
| Transaktionswert |
| Kategorie |
Natürlich ist dies eine stark vereinfachte Einrichtung, aber Sie haben die Idee.
Nun - der Code
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
Der Code - erklärt

Sie werden feststellen, dass wir prüfen, ob wir der Zeichenfolge ein Trennzeichen hinzufügen sollen oder nicht - ohne diese Überprüfung würden Sie entweder eine schlecht formatierte Ergebniszeichenfolge erhalten oder Sie müssten Code hinzufügen, um unerwünschte Trennzeichen zu entfernen. Auf diese Weise bleiben die Dinge von Anfang an schön und ordentlich.
Die Funktion selbst kann natürlich innerhalb einer Abfrage, eines Berichts oder an einer beliebigen Stelle in Access aufgerufen werden.
Korrigierte Zugriffsdatenbank korrigieren
Wenn Sie begegnen beschädigte Access-Datenbanken Wenn Sie den obigen Code ausführen, ist es besser, ein spezielles Tool zu verwenden, um sie zu reparieren und alle Tabellen aus den beschädigten Datenbanken wiederherzustellen.
Einführung des Autors:
Mitchell Pond ist ein Datenrettungsexperte in DataNumen, Inc., das weltweit führend bei Datenwiederherstellungstechnologien ist, einschließlich SQL-Problem beheben und Excel-Wiederherstellungssoftwareprodukte. Für weitere Informationen besuchen Sie www.datanumen.com €XNUMX