HINWEIS
Kapitel 15: Anwendungsdesign
Die Analogie zu normalen Access-Projekten beim Einbinden von Verweisen dürfte Ihnen sicher auffallen.
Arbeiten Sie im Weiteren mit ADOX- oder ADO-Objekten, müssen natürlich in das Add-In-Projekt auch
die entsprechenden Verweise aufgenommen werden.
Möchten Sie eigene Formulare im Add-In realisieren, müssen Sie auch noch einen Verweis auf die .NET-
Assembly System.Windows.Forms einbinden.
Der Quellcode des Add-Ins
Nun können wir uns dem Quellcode des Add-Ins zuwenden. Das im Folgenden abgedruckte Listing ist um
die fett hervorgehobenen Zeilen ergänzt bzw. erweitert worden:
Imports Extensibility
Imports System.Runtime.InteropServices
Die Unterstützung für den Access-Namespace einbinden:
Imports Access = Microsoft.Office.Interop.Access
Wir wollen ein Formular und eine Messagebox einblenden, also brauchen wir noch den folgenden Name-
space:
Imports System.Windows.Forms
Hier beginnt die Klassendefinition:
<GuidAttribute("73CD4C18-249F-4FE9-9C39-B9CE1AC7B410"), ProgIdAttribute("DokoAddIn.Connect")> _
Public Class Connect
Implements Extensibility.IDTExtensibility2
In der folgenden Variablen speichern wir später eine Referenz auf die aufrufende Access-Anwendung:
Dim AccessApp As Access.Application
Dim addInInstance As Microsoft.Office.Core.COMAddIn
Mit diesen Objekten speichern wir Verweise auf spezifische Access-Objekte:
Private WithEvents _button1 As Access.CommandButton
Private WithEvents _combo1 As Access.ComboBox
Private WithEvents _form As Access.Form
Beachten Sie die Deklaration mit
WithEvents,
so können wir innerhalb des Add-Ins auf Ereignisse der Micro-
soft Access-Komponenten reagieren.
Die folgenden (Ereignis-)Methoden ermöglichen es Ihnen auf bestimmte Zustände des Add-Ins zu reagieren:
Public Sub OnBeginShutdown(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub
Public Sub OnAddInsUpdate(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub
1010
Public Sub OnStartupComplete(ByRef custom As System.Array) _
Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub
Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, _
ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
End Sub
Wir nutzen die Methode
OnConnection
für die erste Kontaktaufnahme zwischen Add-In und Access:
Public Sub OnConnection(ByVal application As Object, ByVal connectMode As _
Extensibility.ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
Zunächst speichern wir die Verweise auf die Access-Instanz und auf die Add-In-Instanz ab (Typisierung er-
forderlich da nur
Object
übergeben wird):
AccessApp = CType(application, Access.Application)
addInInstance = CType(addInInst, Microsoft.Office.Core.COMAddIn)
Der Add-In-Instanz wird das aktuelle Objekt (
Me)
übergeben:
addInInstance.Object = Me
End Sub
Über obiges
addInInstance.Object
greifen wir auch in Access auf die Member des Add-Ins zu.
Eine erste einfache Methode für unser Add-In:
Public Sub Info()
MessageBox.Show("Hallo User")
End Sub
Mit der neuen Syntax für die Messagebox in VB.NET müssen Sie sich als VBA-Programmierer abfinden.
Mit der folgenden Methode verbinden wir Access-Objekte mit unserem Add-In. Dazu übergeben wir später
in Access die Referenzen auf die gewünschten Objekte:
Public Sub ControlsAnbinden(ByVal btn As Access.CommandButton, _
ByVal cb As Access.ComboBox, ByVal frm As Access.Form)
Abspeichern der Referenzen in lokalen Objekten (inkl. Ereignisbehandlung):
_button1 = btn
_form = frm
_combo1 = cb
Ab hier dürfte sich das Programm kaum von einem VBA-Programm unterscheiden, wir arbeiten mit den
Access-Objekten mit dem kleinen Unterschied, dass es sich um VB.NET handelt:
_button1.Caption = "Hier geht die Post ab ..."
Die folgende Deklaration ist zwar nicht für VB.NET nötig, Access feuert aber nicht das Ereignis, wenn die
folgende Zuweisung fehlt:
1011
Entwickeln und Einbinden von Managed Add-Ins
HINWEIS
Kapitel 15: Anwendungsdesign
_button1.OnClick = "[Event Procedure]"
_form.OnClose = "[Event Procedure]"
Wir füllen eine Access-ComboBox:
_combo1.RowSourceType = "Wertliste"
_combo1.AddItem("Zeile 1")
_combo1.AddItem("Zeile 2")
_combo1.AddItem("Zeile 3")
_combo1.AddItem("Zeile 4")
_combo1.AddItem("Zeile 5")
_combo1.AddItem("Zeile 6")
Und auch das funktioniert mit einer Referenz auf das Formular:
_form.Button1.Caption = "ENDE" ' nicht schön, aber möglich
Der Fehlerteufel lauert dort, wo Sie Access-Objekte ansprechen die es nicht gibt. Dem Add-In ist nur der Typ
des Formulars mit den Standard-Eigenschaften und -Methoden bekannt, zusätzliche Objekte etc. können Sie zwar ansprechen,
eine Prüfung kann der Compiler aber nicht vornehmen (siehe folgende Abbildung).
Abbildung 15.86 Warnung durch den VB-Compiler
End Sub
Die Ereignisbehandlung für den Button, d.h., wir reagieren mit Managed Code auf ein Access-Ereignis:
Private Sub _button1_click() Handles _button1.Click
Dim s As String
Eine einfache Meldung anzeigen (nur zur Kontrolle):
MessageBox.Show("Button_Click")
Wir instanziieren ein Windows Form und füllen es mit Daten aus einem Access-Formular:
Dim f As New Form1
f.TextBox1.Text = _combo1.RowSource.Replace(";", Chr(13) & Chr(10))
Anzeige des Dialogs:
f.ShowDialog()
Auswerten und Anpassen der ComboBox in Access:
_combo1.RowSource = ""
s = f.TextBox1.Text.Replace(Chr(13) & Chr(10), ";")
_combo1.RowSource = s
End Sub
Hier könnten wir auf das Schließen des Access-Formulars reagieren:
Private Sub _form_Close() Handles _form.Close
1012

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.