Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2014.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Datenblattspalten in der Runtime

Wenn Sie die Daten einer Tabelle oder Abfrage in einem Formular in der Datenblattansicht anzeigen, können Sie über das Kontextmenü komfortabel damit arbeiten – beispielsweise, um Spalten ein- oder auszublenden. Dieses Kontextmenü fehlt leider komplett, wenn Sie die Runtime-Version von Access verwenden. Der Benutzer hat dann keine Möglichkeit, die Spalten nach seinen eigenen Wünschen ein- oder auszublenden. Dieser Beitrag reicht eine Lösung nach, mit der Sie auch dieses Feature in Runtime-Datenbanken anbieten können.

Wenn Sie in einem Datenblatt in einem Formular beispielsweise mit der rechten Maustaste auf einen der Spaltenköpfe klicken, erscheint das Kontextmenü aus Bild 1.

Dieses Kontextmenü lässt sich in der Runtime-Version von Access nicht blicken.

Bild 1: Dieses Kontextmenü lässt sich in der Runtime-Version von Access nicht blicken.

Wenn Sie die Datenbank dann mit der Runtime-Version von Access öffnen (oder zumindest im Runtime-Modus), fehlen sämtliche Kontextmenüs des Datenblatts.

Das ist unpraktisch, da sich ja damit eine Reihe von Aufgaben gleich an Ort und Stelle erledigen lässt – beispielsweise das Ein- und Ausblenden einzelner Spalten.

Bevor wir uns dies im Detail ansehen, noch der Hinweis, wie Sie die Datenbank im Runtime-Modus öffnen können:

  • Wenn Sie mit Access 2003 oder älter arbeiten, erstellen Sie eine Verknüpfung auf die Access-Datenbank und fügen den Parameter /runtime hinzu.
  • Oder Sie arbeiten mit einer neueren Version von Access – dann können Sie einfach den Dateinamen mit der Endung .accdr versehen und die Datenbank dann im Runtime-Modus öffnen.

Ob Sie die Datenbank im Runtime-Modus öffnen, erkennen Sie beispielsweise daran, dass weder eingebaute Menüs noch Ribbons sichtbar sind.

Spalten ein- und ausblenden

Der Kontextmenübefehl Felder ausblenden für das Kontextmenü einer oder mehrerer markierter Spalten blendet die markierten Spalten einfach aus. Wenn Sie den Menübefehl Felder wieder einblenden auswählen, erscheint der Dialog aus Bild 2, mit dem Sie alle Felder komfortabel ein- oder ausblenden können.

Komfortables Ein- und Ausblenden von Feldern

Bild 2: Komfortables Ein- und Ausblenden von Feldern

Kontextmenü ersetzen

Unsere erste Aufgabe ist es, das bestehende Kontextmenü zu ersetzen beziehungsweise in der Runtime-Version von Access überhaupt ein Kontextmenü anzuzeigen, wenn der Benutzer mit der rechten Maustaste auf die Spaltenköpfe der Datenblattansicht klickt.

Dazu benötigen wir zunächst einmal einen Verweis auf die Bibliothek Microsoft Office x.0 Object Library. Diesen fügen Sie über den Dialog aus Bild 3 hinzu, den Sie vom VBA-Editor aus mit dem Menü­befehl Extras|Verweise öffnen. Mit diesem fügen Sie dem VBA-Projekt die CommandBars-Auflistung und weitere gleich benötigte Elemente hinzu.

Hinzufügen eines Verweises auf die Office-Bibliothek

Bild 3: Hinzufügen eines Verweises auf die Office-Bibliothek

Benutzerdefinierte Kontextmenüs werden per VBA zusammengestellt und mit der Methode ShowPopup des entsprechenden CommandBar-Elements angezeigt.

In welcher Ereignisprozedur des Formulars aber lösen wir diese Aktionen aus? Die Lösung ist das Ereignis Bei Maustaste ab des Formulars selbst. Öffnen Sie das Formular in der Entwurfsansicht, wählen Sie im Eigenschaftsfenster den Eintrag Formular aus und selektieren dann den Wert [Ereignisprozedur] für die Eigenschaft Bei Maustaste ab. Klicken Sie dann auf die Schaltfläche mit den drei Punkten (...) rechts von der Eigenschaft, um die entsprechende Prozedur im VBA-Editor anzulegen (s. Bild 4).

Ereignis, das beim Drücken der Maustaste ausgelöst wird

Bild 4: Ereignis, das beim Drücken der Maustaste ausgelöst wird

Diese Prozedur füllen Sie wie in Listing 1. Die Prozedur deklariert je eine Objektvariable für ein CommandBar- und ein CommandBarButton-Objekt sowie eine Variable, welche den Namen des zu erzeugenden Kontextmenüs speichert (strKontextmenue).

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Dim cbr As CommandBar
     Dim cbc As CommandBarButton
     Dim strKontextmenue As String
     Select Case Button
         Case 2
             strKontextmenue = "cbrDatenblatt"
             On Error Resume Next
             CommandBars(strKontextmenue).Delete
             On Error GoTo 0
             Set cbr = CommandBars.Add(strKontextmenue, msoBarPopup, False, True)
             Set cbc = cbr.Controls.Add(msoControlButton)
             With cbc
                 .Caption = "Spalten ausblenden"
                 .OnAction = "=SpaltenAusblenden()"
             End With
             Set cbc = cbr.Controls.Add(msoControlButton)
             With cbc
                 .Caption = "Spalten bearbeiten"
                 .OnAction = "=SpaltenDialog()"
             End With
             cbr.ShowPopup
     End Select
End Sub

Listing 1: Anzeigen eines Kontextmenüs für die Spaltenköpfe des Datenblatts

Die Prozedur prüft dann zunächst anhand des Parameters Button, welche Maustaste der Benutzer angeklickt. Wir wollen eine Aktion nur für die rechte Maustaste ausführen, also prüfen wir auf den Wert 2.

In diesem Fall legen wir zunächst den Namen des Kontextmenüs fest (cbrDatenblatt) und speichern diesen in der Variablen strKontextmenue. Dann deaktivieren wir die Fehlerbehandlung und löschen ein eventuell bereits vorhandenes CommandBar-Objekt gleichen Namens.

Die Fehlerbehandlung haben wir ausgeschaltet, damit das Fehlen dieses Kontextmenüs keinen Fehler beim Versuch auslöst, dieses zu löschen.

Nun erstellen wir mit der Add-Methode der CommandBars-Auflistung ein neues CommandBar-Objekt und legen für dieses fest, dass es den in strKontextmenue gespeicherten Namen erhalten, als Kontextmenü angezeigt werden (msoBarPopup) und temporär erstellt werden soll.

Danach folgen bereits die beiden ersten Befehle, mit denen wir das Ausblenden der aktuell markierten Spalten sowie die Anzeige eines Dialogs zum Ein- und Ausblenden aller Spalten realisieren wollen.

Der Erste wird durch ein CommandBarButton-Objekt ausgelöst, das die Beschriftung Spalten ausblenden trägt und beim Anklicken die über die OnAction-Eigenschaft festgelegte VBA-Funktion SpaltenAusblenden aufruft. Auf ähnliche Weise fügen wir die zweite Schaltfläche mit der Beschriftung Spalten bearbeiten und der VBA-Funktion SpaltenDialog hinzu.

Schließlich zeigt die ShopPopup-Methode des mit der Variablen cbr referenzierten CommandBar-Objekts das Kontextmenü an.

Dieses erscheint nun zunächst wie in Bild 5.

Anzeige des Kontextmenüs

Bild 5: Anzeige des Kontextmenüs

Achtung, Fehlerbehandlung außer Betrieb!

An dieser Stelle ist es sehr wichtig, auf die Besonderheit der Fehlerbehandlung nach dem Aufruf von Funktionen über Kontextmenü-Einträge hinzuweisen.

Wenn Sie dazu eine VBA-Funktion verwenden, die für die Eigenschaft OnAction angegeben wird, ist die Fehlerbehandlung in der VBA-Funktion außer Kraft gesetzt. Wenn ein Fehler auftritt, wird einfach der nachfolgende Befehl ausgeführt, und wenn ein Fehler in einer weiteren durch die Funktion aufgerufenen Routine entsteht, wird diese augenblicklich beendet und die aufrufende Funktion fortgesetzt. Sollte also einmal etwas nicht wie erwartet funktionieren, sollten Sie diese Möglichkeit nicht außer Acht lassen.

Spalten ausblenden

Die erste Funktion namens SpaltenAusblenden soll die aktuell markierten Spalten ausblenden. Dazu fügen Sie die Funktion aus Listing 2 zum Klassenmodul des Formulars hinzu.

Public Function SpaltenAusblenden()
     Dim ctl As Control
     Dim strControlsource As String
     Dim fld As DAO.Field
     For Each ctl In Me.Controls
         On Error Resume Next

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.