Access Anfänger: Wo schreibe ich den VBA-Code hin?

Aus DBWiki
Wechseln zu: Navigation, Suche

Code in Access gehört in Module (wohin sonst?)

Angenommen, es geht um folgende Funktion:

Public Function MeineFunktion(S As Long) As Long
  MeineFunktion = S+1
End Function

Allgemein verwendbarer Code mit Public Functions usw. wie in diesem Fall gehört in ein globales Modul (also nicht in ein Formular- oder Berichts-Klassenmodul).

Also: Code in die Zwischenablage nehmen, im Datenbankfenster "Module" auswählen, Schaltfläche "Neu" - den Code in dem Modul einfügen, das Modul speichern. Dabei fragt Access nach dem zu vergebenden Namen des Moduls.

Wiki hinweis.png Vorsicht: Das Modul anders nennen als irgendeine der Funktionen darin und auch anders als die Datenbank selbst bzw. das Projekt! Es ist deshalb sinnvoll, Module durchgehend mit einem bestimmten Präfix zu benennen wie "mdl", "mod". (Beispiel: "modAllgemein")


Den so gespeicherten Code durchkompilieren (je nach Access-Version im VB-Editor: "Extras / ... kompilieren" oder "Testen / Alle Module kompilieren und speichern".

Die erstellte Funktion(en) ruft man dort auf, wo man sie braucht.

Also z.B. in der OnLoad-/BeimLaden-Ereignisprozedur des Startformulars (wenn es um eine Einmalaktion beim Starten der Anwendung geht), im BeforeUpdate-/VorAktualisierung-Ereignis eines Formularfelds (wenn es um eine Plausibilitätsprüfung geht), im OnClick-/BeimKlicken-Ereignis einer Schaltfläche (für schaltflächen-gesteuerte Aktionen).

Ein typischer Aufruf sieht also so aus:

Private Sub Button_Click()
  MsgBox "13 + 1 = " & MeineFunktion(13)
End Sub

Ansonsten ist die Verwendung davon abhängig, was die Funktion machen soll (eine Konversionsfunktion könnte man z.B. in einem berechneten Abfragefeld für eine Aktualisierungsabfrage verwenden). Die SQL dieser Abfrage sieht dann in unserem Beispiel z.B. so aus:

UPDATE MeineTabelle SET MeinFeld = MeineFunktion(MeinFeld)

Im Abfrageentwurf sind im Gegensatz zu SQL die Parameter durch Semikola anstelle von Kommata zu trennen. Auch ist zu beachten, dass Access die Namen der eingebauten Funktionen ebenso wie einige Parameterwerte "eindeutscht". Das Maß aller Dinge sollte daher nicht der Abfrageentwurf, sondern die resultierende SQL sein. (Siehe auch den Artikel "SQL - was ist das?").

Wiki hinweis.png nota bene: Code abzukupfern, ohne die allereinfachsten Grundlagen der VBA-Programmierung zu beherrschen (also typischerweise: ohne jemals eine eigene Funktion geschrieben zu haben) führt geradewegs ins Desaster!