Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Der Inhalt hier kann für Northwind 2.0 Developer Edition und Starter Edition gelten. 

VBA (Visual Basic for Applications) ist die Programmiersprache, die in allen Office-Produkten verwendet wird. Durch das Erlernen von VBA können Sie mit allen Office-Produkten (nicht nur Access) arbeiten.
Achten Sie bei der Suche nach "Anleitung" darauf, nach Access-spezifischen Beispielen zu suchen und Microsoft Access in die Suche einzubeziehen. Häufig funktionieren Lösungen für die anderen Office-Produkte , aber es gibt keine Garantie. Microsoft Access ist ein ausgereiftes Produkt. das bedeutet, dass es viele Beispiele gibt; das ist großartig für Sie! 

Dies bedeutet auch, dass ältere Bücher zur Access-Programmierung noch für Sie geeignet sind, sich anzusehen. Viele der älteren Bücher sind immer noch auf gebrauchten Buchseiten zu einem Bruchteil ihrer ursprünglichen Kosten erhältlich. Überprüfen Sie die Microsoft-Website, um zu ermitteln, welche Versionen von Access noch unterstützt werden, und verwenden Sie diese.

Ende der Supportressourcen für Office – Bereitstellen von Office | Microsoft Learn  

Im Folgenden finden Sie einige Links zur Access-Dokumentation bei Microsoft.

Microsoft Access-Dateien sind Office-Dateien. Office-Dateien müssen sich an einem "vertrauenswürdigen Speicherort" befinden oder deren "Inhalt aktiviert" sein. Diese Elemente gelten als "sicher", weil Sie sie erstellt haben oder aus einer vertrauenswürdigen Quelle stammen. Die Überprüfung auf vertrauenswürdige Speicherorte erfolgt jedes Mal, wenn Sie eine Office-Datei öffnen. Wir werden dies ab hier als vertrauenswürdig/aktiviert bezeichnen. HINWEIS: Wenn eine neue Version der Anwendung veröffentlicht und von einem nicht vertrauenswürdigen Speicherort geöffnet wird, wird der Vorgang zum Aktivieren des Inhalts wiederholt.

Weitere Informationen zu vertrauenswürdigen Speicherorten: 

Makros, Funktionen und Subs sind die Vorgehensweise zum Implementieren von Geschäftslogik in Ihrer Access-Datenbank. Es ist wichtig, dass Sie den Bereich und die Sichtbarkeit verstehen, bevor Sie beginnen.


Ereignisse (z. B. das Klicken auf ein Steuerelement) in Steuerelementen in einem Formular (z. B. Schaltflächen, Textfelder, Bezeichnungen usw.) lösen andere Prozesse aus, z. B. das Hinzufügen, Löschen von Datensätzen oder das Öffnen von Formularen. Diese Prozesse können entweder mithilfe von Makros oder VBA implementiert werden. Northwind Starter Edition verwendet hauptsächlich Makros und einige VBA,bei denen Makros die erforderlichen Funktionen nicht ausführen können. Northwind Developer Edition verwendet hauptsächlich VBA. 

Einige Steuerelementtypen verfügen über integrierte Assistenten zum automatischen Erstellen eines Makros. Wenn Sie z. B. einem Formular eine Befehlsschaltfläche hinzufügen, wird ein Assistent geöffnet, der verschiedene Funktionen für die Schaltfläche bietet. Durch Hinzufügen eines Kombinationsfelds wird ein Assistent geöffnet, der so konfiguriert werden kann, dass ein bestimmter Datensatz im Formular gesucht wird. 

Der Navigationsbereich ist die Standard Möglichkeit, alle Datenbankobjekte anzuzeigen und darauf zuzugreifen. Er wird standardmäßig auf der linken Seite des Zugriffsfensters angezeigt. 
Der Nordwind-Navigationsbereich wurde angepasst. Wir haben eine benutzerdefinierte Kategorie namens Northwind Starter 2.0 erstellt. Dies ermöglicht es uns, die Objekte nach Funktionsbereich zu organisieren.

Manchmal benötigen Sie, dass eine Variable nach dem Objekt vorhanden ist, das sie erstellt hat, außerhalb des Gültigkeitsbereichs liegt. Siehe Bereich und Sichtbarkeit oben. Hierfür gibt es hauptsächlich drei Möglichkeiten: Öffentliche Variablen, TempVars und Speichern der Werte in einer lokalen Tabelle. Viele Entwickler verwenden eine Mischung aus diesen. Jedes hat seine Vor- und Nachteile.  Mehr dazu finden Sie hier: 

Öffentliche Variable des VBA-Moduls: 

TempVars: 

Speichern der Werte in der lokalen Tabelle

  • Öffentliche Variablen und TempVars sind für die aktuelle Sitzung vorhanden und gehen außerhalb des Bereichs, wenn die Anwendung geschlossen wird. Was aber, wenn Sie benutzerspezifische Variablen sitzungsübergreifend beibehalten möchten? Sie können diese Wertetypen in einer lokalen Tabelle speichern. In Northwind 2.0 wird eine solche Variable in einer Tabelle mit dem Namen SystemSettings gespeichert. Der Wert in der Tabelle ist ShowWelcome. Dieser Wert teilt Access mit, ob bei jeder Anmeldung der Willkommensbildschirm angezeigt werden soll.

Entwickler müssen häufig Parameter von einem Formular an ein anderes oder von einem Formular an einen Bericht übergeben. Diese Parameter vermitteln wichtige Informationen, die die aufgerufene Funktion dann verwendet, um sich selbst zu konfigurieren. Es gibt mehrere Möglichkeiten, wie das zweite Formular oder der zweite Bericht Informationen aus dem ersten Formular abrufen kann. Im Folgenden finden Sie einige dieser Möglichkeiten: 

  1. Das zweite Formular kann auf das erste Formular "zurückschauen", um einige Werte zu erfassen, möglicherweise im sichtbaren oder unsichtbaren Steuerelement.  Beispiel:
    lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Das erste Formular kann Werte in globalen Variablen oder in TempVars speichern. Beispiel:
    g_lngUserID = Me.cboUserID 
    TempVars.Add "UserID", Me.cboUserID 

Die Methode, die häufig in der Northwind Developer Edition sowie in unserem beruflichen Leben verwendet wird, verwendet das OpenArgs-Argument von DoCmd.OpenForm oder OpenReport. Beispiel:

DoCmd.OpenForm "frmCompanyDetail", OpenArgs:=StringFormat("CompanyID={0} &CompanyTypeID={1}", Me.VendorID, ctVendor)

Wir kombinieren hier zwei Techniken: (1) die Verwendung von OpenArgs zum Übergeben von VendorID und VendorType und (2) die Verwendung der StringFormat() -Funktion zum Erstellen dieser Zeichenfolge: 

CompanyID=5&CompanyTypeID=2 

Diese Zeichenfolge ähnelt einer Abfragezeichenfolge, wie sie in einem Browser verwendet wird. Sie enthält ein oder mehrere "Name/Wert-Paare", die durch das kaufmännische und -Zeichen getrennt sind: 

name1=value1&name2=value2


Der Vorteil einer solchen Zeichenfolge besteht darin, dass jeder Wert einen Namen hat. Vergleichen Sie dies mit einem einfacheren Ansatz, bei dem Sie OpenArgs nur auf "5,2" festlegen würden.  In einem solchen Fall würde es mühen, herauszufinden, was jeder Wert bedeutet. Durch das Benennen jedes Werts wird die Abfragezeichenfolge "selbstbeschreibt", was eine gute Programmierpraxis ist.

Am empfangenden Ende von DoCmd.OpenForm befinden wir uns in der Regel im Form_Open - oderF-orm_Load-Ereignis und möchten die OpenArgs-Zeichenfolge in ihre Komponenten analysieren.

In Northwind können Sie dies mit der StringToDictionary-Funktion tun. Sie nimmt eine abfragezeichenfolgenähnliche Funktion und analysiert sie in ihre Komponenten. Diese Komponenten werden dann in einem Scripting.Dictionary-Objekt gespeichert. Beachten Sie, dass Sie hierfür Tools > Verweise verwenden und einen Verweis auf Microsoft Scripting Runtime (scrrun.dll) festlegen müssen.

Zu den Features und Vorteilen des Dictionary-Objekts gehören:  

  • Die Reihenfolge der Elemente ist nicht wichtig.

  • Einfache Funktionen zum Hinzufügen und Entfernen von Elementen der Auflistung

  • Funktionen zum Durchlaufen der Sammlung, damit Sie wissen können, was darin enthalten ist

  • Eine Exists-Funktion , mit der Sie testen können, ob ein bestimmtes Element verfügbar ist

Die Verwendung des Wörterbuchobjekts wird in Northwind angezeigt. Beispiel: das Form_Load-Ereignis in frmGenericDialog.

Makros, die mit Steuerelement-Assistenten in Access erstellt wurden, umfassen selten die Fehlerbehandlung. Vba, das mit Steuerelement-Assistenten erstellt wurde, kann auf eine generische MsgBox Err.Description beschränkt sein.

In Northwind 2.0 zeigen wir Ihnen, wie Sie dies bei verwendung von VBA-Code besser machen können. Wir haben einen sogenannten globalen Fehlerhandler implementiert. Fehler, die in einer Prozedur auftreten, rufen eine Funktion auf globaler Ebene auf, um den Fehler anzuzeigen. Der große Vorteil besteht darin, dass die Fehlerbehandlung konsistent ist. Und wenn die Nachricht geändert werden muss (z. B. um die Fehlernummer zusätzlich anzuzeigen oder den Fehler in einer Datei zu protokollieren), muss dies nur an einem Ort erfolgen. 

clsErrorHandler ist das Klassenmodul, das den Fehlerbehandlungscode implementiert. Ein Klassenmodul hält alle Standard- und Hilfsfunktionen in einer Einheit zusammen und kapselt so den Code.

Das AutoExec-Makro ruft die Startup-Funktion in modStartup auf. In der Starter Edition erstellt die Funktion eine instance von clsErrorHandler und speichert sie als globale Variable, die in der gesamten Anwendung verwendet werden kann. In der Dev Edition wird eine statische Klasse verwendet. Weitere Informationen finden Sie in den Kommentaren oben im Klassenmodul.

Tatsächlich ist der Fehlerbehandlungscode in Prozeduren so konsistent, dass wir ihn in weniger als fünf Minuten mit spezifischem VBA-Code erstellen konnten, der jede Prozedur mit dem richtigen Fehlerhandler ausgestattet hat. (Code, der nicht in der Vorlage enthalten ist). Sowohl northwind 2.0 Starter- als auch Developer-Vorlageneditionen wurden ursprünglich mit diesem Fehlerbehandlungsansatz ausgestattet. 
'

VERBESSERTE FEHLERBEHANDLUNG

Ab Version 2.2 der Northwind Developer Edition wurde der Fehlerhandler dank Feedback der Access-Community verbessert. Die Starter-Edition ist unverändert. 

Im Wesentlichen lautet der Fehlerhandler in der vorherigen Version (2.0 – veröffentlicht im April 2023) wie folgt:

Public Sub HandleError(…)
    MsgBox Err.Description
End Sub


In Version 2.2 wird ein Upgrade auf Folgendes durchgeführt:

Public Sub HandleError (…, Optional ByVal IsEventProcedure As Boolean = False)
    If Not IsEventProcedure Then
        Err.Raise lngError, strErrSource
    End If
    MsgBox Err.Description
End Sub


Um zu verstehen, warum diese Änderung vorgenommen wurde, verstehen wir zunächst, wie Code ausgeführt wird:

  • Das AutoExec-Makro ruft die Startprozedur auf, die einige Initialisierungen vor dem Öffnen des ersten Formulars ausführt.

  • Der Benutzer interagiert mit der Anwendung, z. B. das Öffnen eines Formulars oder das Klicken auf eine Schaltfläche, wodurch Ereignisprozeduren wie Form_Load und cmdPrintInvoice_Click ausgelöst werden.
    '

Zusätzlich zu Ereignisprozeduren verfügen Anwendungen über Unterroutinen und Funktionen , hauptsächlich in Modulen, und dieser Code wird aus den Ereignisprozeduren aufgerufen. Diese werden als "Standardverfahren" bezeichnet.

In Version 2.0 von Northwind würden die Standardprozeduren ihre eigenen Fehler mit Nachrichten behandeln, aber sie würden die aufrufende Ereignisprozedur nicht darüber informieren, dass ein Fehler aufgetreten ist. Dies kann schlecht sein, wenn die Ereignisprozedur über nachfolgenden Code verfügt, der unabhängig vom vorherigen Fehler ausgeführt werden soll, der von der aufgerufenen Prozedur behandelt wird. Sicher, wir könnten die Unterroutine durch eine Funktion ersetzen, die Erfolg oder Fehler zurückgibt, und die Ereignisprozedur entsprechend codieren, aber dies ist nicht immer eine Option.

In Northwind Version 2.2 behandeln die Standardprozeduren keine Fehlermeldungen, sondern melden sie mithilfe von Err.Raise an die aufrufende Ereignisprozedur zurück. Die aufrufende Ereignisprozedur zeigt dann den ausgelösten Fehler an und wird bei Exit_Handler fortgesetzt. Dies ist besser, da die aufrufende Prozedur ordnungsgemäß abgeschlossen werden kann.

Um den Northwind Version 2.2-Code zu verwenden, müssen Ereignisprozeduren ein drittes Argument an HandleError übergeben, das angibt, dass es sich bei dem Aufrufer um eine Ereignisprozedur handelt. Northwind Dev Edition wurde dazu aktualisiert.

Ein noch leistungsfähigeres Fehlerhandlermodul würde "Pushing and Popping"-Prozeduren in einem "Stack" (Array) unterstützen. Das erste Element ist immer die Ereignisprozedur, sodass das zusätzliche Argument nicht benötigt wird. Diese Implementierung geht über die Ziele der Northwind Dev Edition hinaus.

MRU oder Most Zuletzt verwendet ist eine Liste der zuletzt verwendeten Bestellungen und Bestellungen. Sie sollten häufig zu diesen zurückkehren, um sie in den nächsten Status zu setzen. MRU-Listen werden in Office-Produkten häufig als Liste der zuletzt verwendeten Dateien gesehen, die Sie möglicherweise erneut öffnen möchten.

In der Northwind Dev Edition müssen Sie zunächst die folgenden Elemente festlegen, um das MRU-Feature (das in der Starter Edition nicht vorhanden ist) zu implementieren: 

  1. Eine Tabelle zum Speichern von MRU-Informationen.

  2. Code zum Aktualisieren der Tabelle, wenn eine Bestellung oder Bestellung (Order, PO) geöffnet wird.

  3. Code zum Aktualisieren der MRU-Dropdownliste im Menüband.

  4. Code zum Laden des Elements, wenn ein MRU-Element im Menüband ausgewählt wird.

Sehen wir uns die einzelnen Details an. 


1. Tabelle zum Speichern von MRU-Informationen.

Das Design der Tabelle MRU ist eine Überprüfung wert, insbesondere deren Indizes. Beachten Sie, dass ein doppelter Index SortIdx zur Schnellen Sortierung der MRU-Elemente in der Dropdownliste des Menübands sowie ein eindeutiger Index vorhanden ist, um die Geschäftsregel zu erzwingen, dass für jeden Benutzer ein Element nur einmal auftreten kann. Wenn Sie beispielsweise dieselbe Reihenfolge zweimal öffnen, werden keine zwei Datensätze in der MRU-Tabelle erstellt.


Die Tabelle nutzt die Tatsache, dass alle MRU-bezogenen PK-Felder (Primärschlüssel) in der Datenbank AutoNumber sind, sodass der Long Integer-Datentyp für PKValue verwendet werden kann.

2. Code zum Aktualisieren der Tabelle, wenn eine Bestellung oder P.O. geöffnet wird.

In NW2 haben wir uns entschieden, der MRU-Liste nur dann hinzuzufügen, wenn ein neuer Datensatz erstellt wurde, nicht, wenn ein vorhandener Datensatz erneut aktualisiert wurde. Wir könnten den AddToMRU-Aufruf sicherlich von Form_AfterInsert in Form_AfterUpdate verschieben, um dies zu unterstützen.

Die Prozeduren AddToMRU und DeleteFromMRU werden in modGlobal implementiert, einem Standardmodul, dessen öffentliche Prozeduren von jedem Formular aus sichtbar sind.

AddToMRU (wie der Name schon sagt) fügt das neue Element der MRU-Tabelle hinzu und schneidet es dann optional wieder ab und löscht den ältesten Datensatz, wenn er die maximale Größe (MAX_MRU_COUNT) überschreitet. Der letzte Schritt ist den Access-Entwicklern wahrscheinlich am wenigsten bekannt: Die Dropdownliste des Menübands muss aktualisiert werden, und dies wird durch Aufrufen von InvalidateControl erreicht. Dies ist ein Signal an das Menüband, um den Initialisierungsprozess erneut auszuführen. 

3. Code zum Aktualisieren der MRU-Dropdownliste im Menüband. 

Zum Startzeitpunkt und nach dem Aufruf von InvalidateControl wird ein komplexer Satz von Funktionen ausgeführt, um das Menüband aufzufüllen.  Diese Prozeduren werden von der Menüband-XML in der Tabelle uSysRibbons aufgerufen, die zum Teil folgendes besagt:

<group id="gCurrentStatus" label="MRU">
    <box id="bxMRU" boxStyle="vertical">
        <dropDown id="ddMRU"
                  getItemCount="ddMRU_GetItemCount"
                  getItemLabel="ddMRU_GetItemLabel"
                  getSelectedItemIndex="ddMRU_GetSelectedItemIndex"
                  getItemID="ddMRU_GetItemID"
                  onAction="ddMRU_OnAction"
                  screentip="Most Recently Used Objects">
        </dropDown>
    </box>
</group>

Diese vier Rückruffunktionen füllen die Dropdownliste auf. Beachten Sie, dass dies die gleiche Idee ist, die hier für Standardkombinationen beschrieben wird.

Wenn Sie die Auskommentierung der Debug.Print-Zeilen in modRibbonCallback aufheben und die Anwendung neu starten, wird im Direktfenster eine Sequenz wie die folgende angezeigt: 

ddMRU_GetItemCount    ddMRU    6 
ddMRU_GetItemLabel    ddMRU    0      Order 60, Proseware, Inc.
ddMRU_GetItemID       ddMRU    0       2 
ddMRU_GetItemLabel    ddMRU    1      Order 62, Best For You Organics Company
ddMRU_GetItemID       ddMRU    1       4 
ddMRU_GetItemLabel    ddMRU    2      Order 63, Wide World Importers
ddMRU_GetItemID       ddMRU    2       5 
ddMRU_GetItemLabel    ddMRU    3      Order 66, Proseware, Inc.
ddMRU_GetItemID       ddMRU    3       8 
ddMRU_GetItemLabel    ddMRU    4      Order 67, Best For You Organics Company
ddMRU_GetItemID       ddMRU    4       9 
ddMRU_GetItemLabel    ddMRU    5      Order 68, Adatum Corporation
ddMRU_GetItemID       ddMRU    5       10 
ddMRU_GetSelectedItemIndex  ddMRU    0


Hier sehen Sie, dass Access zuerst eine Prozedur aufruft, die die Anzahl der zu ladenden Elemente im ByRef-Argument von ddMRU_GetItemCount zurückgibt. Dies ist auch der Zeitpunkt, zu dem wir die Abfrage für die MRU-Tabelle öffnen und zwischenspeichern, da sie mehrere Male verwendet werden soll. 

Das Menüband ruft dann wiederholt zwei Prozeduren auf, um die ID- und Bezeichnungswerte für die zweispaltige Dropdownliste abzurufen. 

Schließlich wird eine Prozedur aufgerufen, um zu verhindern, welches Element ausgewählt werden soll. (In unserem Fall ist es die erste.) 

4. Code zum Laden eines Elements, wenn das MRU-Element im Menüband ausgewählt wird.

Wie bei jedem anderen Menübandelement gibt die OnAction-Eigenschaft im Menüband-XML eine Rückruffunktion an, die zum Ausführen der Aktion verwendet werden soll:

onAction="ddMRU_OnAction"

Dieses Verfahren wird in modRibbonCallback implementiert. Das bereits geöffnete Recordset wird erneut verwendet, um den Datensatz mit dem ausgewählten Element zu suchen. Anschließend wird je nach erforderlichem TableName das entsprechende Formular geöffnet und der zu ladende PK-Wert übergeben.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×