{"id":55000643,"date":"2008-12-01T00:00:00","date_gmt":"2021-03-22T16:20:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=643"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"AccessAddIns","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/","title":{"rendered":"Access-Add-Ins"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wollen Sie Access um Funktionen erweitern, stehen Sie vor der Entscheidung, ob Sie ein Access-Add-In oder ein COM-Add-In bauen. Ersteres ist dem Access-Entwickler nat&uuml;rlich lieber, weil er sich nicht auf ungewohntes Terrain begeben muss. Wir zeigen am Beispiel eines Steuerelement-Rename-Tools, was Sie beim Bau eines Access-Add-Ins beachten m&uuml;ssen.<\/b><\/p>\n<p>Ein Access-Add-In ist in erster Instanz eine herk&ouml;mmliche Access-Datenbank, die allerdings einige Besonderheiten aufweist. Als Erstes w&auml;re da die Tatsache zu nennen, dass sie nat&uuml;rlich nicht allein, sondern immer in Zusammenhang mit einer anderen Access-Anwendung ge&ouml;ffnet wird &#8211; immerhin soll das Add-In ja bei der Entwicklung einer Anwendung helfen. Dazu m&uuml;ssen Sie einige Voraussetzungen erf&uuml;llen: Als Erstes ben&ouml;tigt die Add-In-Datenbank eine &ouml;ffentliche Funktion in einem Standardmodul, welche zum Aufrufen des Add-Ins beziehungsweise der enthaltenen Funktion n&ouml;tig ist.<\/p>\n<p>Dabei gibt es zwei M&ouml;glichkeiten:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Das Add-In besitzt eine Benutzeroberfl&auml;che in Form eines Formulars, das durch die &ouml;ffentliche Funktion angezeigt wird, um dem Benutzer die Steuerung des Add-Ins zu erm&ouml;glichen.<\/li>\n<li class=\"aufz-hlung\">Das Add-In besitzt keine Benutzeroberfl&auml;che, sondern soll ausschlie&szlig;lich VBA-Code ausl&ouml;sen, der eine bestimmte Aufgabe erledigt. Diesen bringt man dann entweder direkt in der &ouml;ffentlichen Funktion unter oder ruft von dort aus entsprechende Routinen auf.<\/li>\n<\/ul>\n<p><b>Registry<\/b><\/p>\n<p>Damit ein Add-In beim Bearbeiten einer anderen Anwendung zur Verf&uuml;gung steht, ben&ouml;tigen Sie ein paar Registry-Eintr&auml;ge. Bei einem Men&uuml;-Add-In, das man unter Access 2003 &uuml;ber den Men&uuml;eintrag <b>Extras|Add-Ins <\/b>&ouml;ffnen m&ouml;chte, liegen diese in der Registry im Pfad <b>HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Office\\12.0\\Access\\Menu Add-Ins<\/b> (12.0 ersetzen Sie dabei durch die jeweilige Office-Version).<\/p>\n<p>Dort ben&ouml;tigen Sie zun&auml;chst einen Schl&uuml;ssel mit dem Namen des Add-Ins, zum Beispiel <b>ControlRenamer<\/b>. Unterhalb dieses Schl&uuml;ssels legen Sie dann die folgenden Eintr&auml;ge des Typs <b>Zeichenfolge <\/b>an:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Description: Beschreibung des Add-Ins<\/li>\n<li class=\"aufz-hlung\">Expression: Aufruf der &ouml;ffentlichen Funktion in der Add-In-Datenbank, die das Add-In startet<\/li>\n<li class=\"aufz-hlung\">Library: Pfad und Name der Add-In-Datenbank<\/li>\n<\/ul>\n<p>Zur Vereinfachung beim Anlegen eines Add-Ins hat Microsoft sich etwas einfallen lassen: Sie k&ouml;nnen die ben&ouml;tigten Informationen in einer Tabelle namens <b>USysRegInfo <\/b>unterbringen. Diese sieht wie in Bild 1 aus und hat eine Besonderheit: Tabellen, deren Name mit <b>USys&#8230;<\/b> beginnt, zeigt Access standardm&auml;&szlig;ig nicht an. Dies geschieht erst, wenn Sie die Anzeige ausgeblendeter Objekte aktivieren (unter Accesss 2003 und &auml;lter: Access-Optionen, Registerseite <b>Ansicht<\/b>, Eigenschaft <b>Ausgeblendete Objekte<\/b>, unter Access 2007: Rechtsklick auf den Kopf des Navigationsbereichs, Eintrag <b>Navigationsoptionen<\/b>, Option <b>Ausgeblendete Objekte anzeigen<\/b>).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Add-Ins-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Der Add-In-Manager liest diese Eintr&auml;ge aus und schreibt sie in die Registry.<\/span><\/b><\/p>\n<p>Wenn Sie jetzt noch eine Funktion namens <b>Autostart<\/b> in einem Standardmodul anlegen, die wie folgt aussieht, k&ouml;nnen Sie das Add-In bereits registrieren:<\/p>\n<pre>Public Function Autostart()\r\n    MsgBox &quot;ControlRenamer&quot;\r\nEnd Function<\/pre>\n<p>Dazu schlie&szlig;en Sie die Add-In-Datenbank und benennen sie in <b>.mda <\/b>(Access 2003 und &auml;lter) oder <b>.accda <\/b>(Access 2007) um, um den g&auml;ngigen Konventionen zu entsprechen. Dann &ouml;ffnen Sie eine beliebige Datenbank unter Access und rufen den Add-In-Manager auf (unter Access 2003 und &auml;lter: <b>Extras|Add-Ins|Add-In-Manager<\/b>, unter Access 2007: Ribboneintrag <b>Datenbanktools|Add-Ins|Add-In-Manager<\/b>). Dieser sieht wie in Bild 2 aus und zeigt nach einem Klick auf die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230; <\/b>einen <b>Datei &ouml;ffnen<\/b>-Dialog an. W&auml;hlen Sie hier die soeben erstellte Add-In-Datenbank aus und klicken Sie auf <b>&Ouml;ffnen<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Add-Ins-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Der Add-In-Manager von Access<\/span><\/b><\/p>\n<p>Der Add-In-Manager zeigt daraufhin einen entsprechenden Eintrag in der Liste der Add-Ins an, wobei dieser im Gegensatz zu den anderen m&ouml;glicherweise schon vorhandenen Add-Ins nicht durch ein <b>x <\/b>markiert ist. Dies ist jedoch kein Grund zur Sorge: Beim n&auml;chsten &Ouml;ffnen des Add-In-Managers ist auch dieser Eintrag entsprechend markiert.<\/p>\n<p>Au&szlig;erdem sollte auch das &uuml;ber den Add-Ins-Men&uuml;eintrag zu &ouml;ffnende Men&uuml; den Namen des neuen Add-Ins anzeigen. Mit einem Klick auf dieses l&ouml;sen Sie es aus und zeigen so das in obiger Routine programmierte Meldungsfenster an.<\/p>\n<p><b>Was ist geschehen<\/b><\/p>\n<p>Der Add-In-Manager hat nun zweierlei Dinge erledigt:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Er hat die Add-In-Datei an den in der Tabelle angegebenen Ort kopiert, in diesem Fall <b>|ACCDIR\\ControlRenamer.accda<\/b>. <b>|ACCDIR <\/b>entspricht hier dem Verzeichnis <b>C:\\Dokumente und Einstellungen\\&lt;Benutzername&gt;\\Anwendungsdaten\\Microsoft\\AddIns\\<\/b>.<\/li>\n<li class=\"aufz-hlung\">Er hat au&szlig;erdem die in der Tabelle <b>USysRegInfo <\/b>angegebenen Registry-Eintr&auml;ge vorgenommen.<\/li>\n<\/ul>\n<p>Dadurch ruft Access beim Klick auf den Add-In-Eintrag nun jeweils die angegebene Funktion des neuen Add-Ins auf, das sich im Add-In-Verzeichnis des aktuellen Benutzers befindet.<\/p>\n<p><b>Achtung, Falle!<\/b><\/p>\n<p>Besonders wichtig ist das oben beschriebene Umkopieren der Add-In-Datenbank in das Add-In-Verzeichnis, wenn Sie nachtr&auml;glich &auml;nderungen am Add-In vornehmen: Dies erledigen Sie dann entweder direkt mit der im Add-In-Verzeichnis gespeicherten Datenbank oder Sie bearbeiten die in einem Entwicklungs-Verzeichnis enthaltene Datenbank und kopieren die jeweils neue Version in das Add-In-Verzeichnis. Dabei leistet eine kleine Batch-Datei namens <b>CopyToAddInsPath.bat <\/b>mit folgendem Inhalt gute Dienste:<\/p>\n<pre>Copy &quot;&lt;Originalverzeichnis&gt;\\ControlRename.accda&quot; &quot;&lt;Add-In-Verzeichnis&gt;&quot; \/Y\r\nPause<\/pre>\n<p>Hier m&uuml;ssen Sie noch die Platzhalter <b>&lt;Originalverzeichnis&gt; <\/b>und <b>&lt;Add-In-Verzeichnis&gt; <\/b>ersetzen. Die Option <b>\/Y <\/b>sorgt daf&uuml;r, dass eine bestehende Datei ohne R&uuml;ckfrage &uuml;berschrieben wird, der Befehl <b>Pause <\/b>l&auml;sst die Eingabeaufforderung ge&ouml;ffnet, damit Sie sich vom Erfolg der Aktion &uuml;berzeugen k&ouml;nnen.<\/p>\n<p><b>Feinheiten<\/b><\/p>\n<p>M&ouml;glicherweise m&ouml;chten Sie Ihr Add-In richtig rund machen &#8211; sodass es beispielsweise im Add-In-Manager einen entsprechenden Text f&uuml;r den Autor und die Beschreibung des Add-Ins anzeigt. Dies ist nat&uuml;rlich hilfreich, gerade wenn man mit mehreren Add-Ins arbeitet und mit einem Blick erfahren m&ouml;chte, was ein bestimmtes Add-In f&uuml;r eine Aufgabe hat. Um die beiden in Bild 2 zu erkennenden Felder zu f&uuml;llen, schlie&szlig;en Sie die Add-In-Datenbank und zeigen &uuml;ber das Kontextmen&uuml; ihres Eintrags im Windows Explorer ihr Eigenschaftsfenster an. Dort brauchen Sie nur die beiden Eigenschaften <b>Autor <\/b>und <b>Kommentar <\/b>mit den gew&uuml;nschten Texten zu versehen &#8211; fertig!<\/p>\n<p><b>Add-In entfernen<\/b><\/p>\n<p>Zum Entfernen eines Add-Ins, etwa um es erneut sauber zu installieren, sind zwei Schritte n&ouml;tig:<\/p>\n<ul>\n<li class=\"aufz-hlung\">L&ouml;schen der Registry-Eintr&auml;ge: Dies erledigen Sie, indem Sie das Add-In im Add-In-Manager markieren und auf <b>Deinstallieren <\/b>klicken.<\/li>\n<li class=\"aufz-hlung\">Entfernen der Add-In-Datenbank aus dem Add-In-Verzeichnis<\/li>\n<\/ul>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Steuerelemente umbenennen<\/p>\n<p>Kommen wir zur Aufgabe unseres Beispiel-Add-Ins: Wenn man ein Formular oder einen Bericht an eine Datenherkunft wie eine Tabelle oder Abfrage bindet und Elemente dieser Datenherkunft aus der Feldliste in den Entwurf zieht, legt Access automatisch Steuerelemente an, die im Wesentlichen zwei Eigenschaften aufweisen: den Namen des Feldes als Name des Steuerelements und gleichzeitig als Steuerelementinhalt. F&uuml;r den Steuerelementinhalt ist dies okay, den Namen des Steuerelements m&ouml;chte man aber vielleicht einer Namenskonvention anpassen. Diese k&ouml;nnte beispielsweise f&uuml;r verschiedene Steuerelemente bestimmte Pr&auml;fixe verlangen:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Textfeld: <b>txt<\/b><\/li>\n<li class=\"aufz-hlung\">Kombinationsfeld: <b>cbo<\/b><\/li>\n<li class=\"aufz-hlung\">Listenfeld: <b>lst<\/b><\/li>\n<li class=\"aufz-hlung\">Kontrollk&auml;stchen: <b>chk<\/b><\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Meist verzichten Entwickler darauf, gebundene Steuerelemente so umzubenennen, und behalten die Feldnamen als Steuerelementnamen bei. Unser Add-In soll die gebundenen Steuerelemente eines Formulars automatisch umbenennen.<\/p>\n<p>Wie aber geschieht dies am einfachsten Immerhin sollte der Benutzer noch ein wenig Kontrolle dar&uuml;ber behalten, wie seine Steuerelemente sp&auml;ter hei&szlig;en. Grunds&auml;tzlich macht das geplante Add-In nat&uuml;rlich am meisten Sinn, wenn man es direkt nach dem Erstellen der Steuerelemente einsetzt und nicht erst nach dem Hinzuf&uuml;gen von Ereignisprozeduren, die durch die betroffenen Steuerelemente ausgel&ouml;st werden oder auf deren Inhalt zugreifen. F&uuml;r eine m&ouml;glichst gro&szlig;e Kontrolle soll der Benutzer vor dem Umbenennen vorher sehen, f&uuml;r welche Steuerelemente eine Namens&auml;nderung Sinn macht, und dann selbst ausw&auml;hlen, ob dies auch f&uuml;r alle angegebenen Steuerelemente geschehen soll. Das Add-In soll dazu die betroffenen Formulare und Berichte sowie ihre Steuerelemente in einem Formular anzeigen.<\/p>\n<p>Das sieht, wenn das Add-In einmal fertig ist, wie in Bild 3 aus. Es zeigt ein Kombinationsfeld zum Ausw&auml;hlen aller vorhandenen Formulare und Berichte an. Beim Einlesen der Objekte werden jedoch nur diejenigen ber&uuml;cksichtigt, die &uuml;berhaupt noch gebundene Steuerelemente enthalten, deren Name mit dem Feldnamen &uuml;bereinstimmt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Add-Ins-web-images\/pic003_opt.jpeg\" alt=\"pic003.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Das fertige Add-In zum Anpassen von Steuerelementbezeichnungen<\/span><\/b><\/p>\n<p>Das Listenfeld unter dem Kombinationsfeld zeigt alle gebundenen Steuerelemente des ausgew&auml;hlten Formulars oder Berichts an, deren Name-Eigenschaft mit der Steuerelementinhalt-Eigenschaft &uuml;bereinstimmt.<\/p>\n<p>Der Benutzer kann mit zwei Schaltfl&auml;chen alle Eintr&auml;ge markieren oder abw&auml;hlen und per Mausklick auf die Listenfeldeintr&auml;ge auch einzelne Elemente herauspicken, die er mit einem Pr&auml;fix versehen m&ouml;chte. Klickt er auf die Schaltfl&auml;che <b>Steuerelementnamen &auml;ndern<\/b>, fragt das Add-In noch kurz nach, ob es die &auml;nderungen wirklich vornehmen soll, und f&uuml;hrt diese dann aus.<\/p>\n<p><b>Formularbau<\/b><\/p>\n<p>Das Formular sieht in der Entwurfsansicht wie in Bild 4 aus. Die Datensatzherkunft des Kombinationsfelds <b>cboObjects <\/b>enth&auml;lt zun&auml;chst die Werte einer Tabelle namens <b>tblObjects<\/b>, die des Listenfelds <b>lstControls <\/b>ist zun&auml;chst leer, wird aber sp&auml;ter aus einer weiteren Tabelle namens <b>tblControls <\/b>gespeist.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Add-Ins-web-images\/pic004_opt.jpeg\" alt=\"pic004.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Das Add-In-Formular in der Entwurfsansicht<\/span><\/b><\/p>\n<p>Warum Tabellen in der Add-In-Datenbank Nun, wir arbeiten mit Access, und wenn die M&ouml;glichkeit besteht, Informationen in Tabellen zu speichern und diese so ganz leicht in Steuerelementen wie etwa Kombinations- oder Listenfeldern anzuzeigen, sollte man das auch ausnutzen.<\/p>\n<p>Wie kommt das Kombinationsfeld <b>cboObjects <\/b>zu seinen Daten Das Add-In f&uuml;llt die Tabellen <b>tblObjects <\/b>und <b>tblControls <\/b>erstmalig beim Laden des Formulars, und zwar &uuml;ber die Routine <b>ScanDatabase <\/b>aus Listing 1.<\/p>\n<p class=\"kastentabelleheader\">Listing 1: Diese Routine durchl&auml;uft alle Formular- und Berichtsobjekte und ruft f&uuml;r jedes die Prozedur ScanObject auf.<\/p>\n<pre>Private Sub ScanDatabase()\r\n    Dim dbAddin As DAO.Database\r\n    Dim obj As AccessObject\r\n    Set dbAddin = CodeDb\r\n    dbAddin.Execute &quot;DELETE FROM tblObjects&quot;, dbFailOnError\r\n    For Each obj In CurrentProject.AllForms\r\n        ScanObject obj, dbAddin\r\n    Next obj\r\n    For Each obj In CurrentProject.AllReports\r\n        ScanObject obj, dbAddin\r\n    Next obj\r\n    dbAddin.Execute &quot;DELETE FROM tblObjects WHERE ID NOT IN &quot; _\r\n        &amp; &quot;(SELECT DISTINCT ObjectID FROM tblControls)&quot;, dbFailOnError\r\nEnd Sub<\/pre>\n<p><b>ScanDatabase <\/b>durchl&auml;uft zun&auml;chst die Auflistung <b>AllForms <\/b>der Formulare des Objekts <b>CurrentProjects <\/b>und erledigt anschlie&szlig;end das Gleiche f&uuml;r die Berichte. Sie ruft f&uuml;r jedes Objekt einmal die Routine <b>ScanObject <\/b>auf (s. Listing 2). Diese Routine ermittelt zun&auml;chst den Namen und den Typ des Objekts und schreibt diese in die Tabelle <b>tblObjects<\/b>, die wie in Bild 5 aussieht.<\/p>\n<p class=\"kastentabelleheader\">Listing 2: Diese Routine liest Informationen aus Formularen und Berichten sowie aus deren Steuerelementen ein und schreibt sie in die beiden Tabellen tblObjects und tblControls.<\/p>\n<pre>Private Sub ScanObject(obj As AccessObject, dbAddin As DAO.Database)\r\n    '' ... Deklarationen ...\r\n    If Not obj.Name = Me.Name Then\r\n        strObjectname = obj.Name\r\n        lngObjecttype = obj.Type\r\n        dbAddin.Execute &quot;INSERT INTO tblObjects(Objectname, Objecttype) VALUES(''&quot; _\r\n            &amp; strObjectname &amp; &quot;'', &quot; &amp; lngObjecttype &amp; &quot;)&quot;, dbFailOnError\r\n        lngObjectID = dbAddin.OpenRecordset(&quot;SELECT @@IDENTITY&quot;).Fields(0)\r\n        If lngObjecttype = 2 Then ''Form\r\n            DoCmd.OpenForm strObjectname, view:=acDesign, WindowMode:=acHidden\r\n            Set objFormReport = Forms(strObjectname)\r\n        Else ''Report\r\n            DoCmd.OpenReport strObjectname, view:=acViewDesign, WindowMode:=acHidden\r\n            Set objFormReport = Reports(strObjectname)\r\n        End If\r\n        For Each ctl In objFormReport.Controls\r\n            Select Case ctl.ControlType\r\n                Case acCheckBox, acComboBox, acListBox, acTextBox\r\n                    strControlname = ctl.Name\r\n                    lngControltype = ctl.ControlType\r\n                    strControlsource = ctl.ControlSource\r\n                    If strControlname = strControlsource Then\r\n                        Select Case ctl.ControlType\r\n                            Case acCheckBox: strPrefix = &quot;chk&quot;\r\n                            Case acComboBox: strPrefix = &quot;cbo&quot;\r\n                            Case acListBox: strPrefix = &quot;lst&quot;\r\n                            Case acTextBox: strPrefix = &quot;txt&quot;\r\n                    End Select\r\n                    dbAddin.Execute &quot;INSERT INTO tblControls(Controlname, Controltype, ControlSource, &quot; _\r\n                        &amp; &quot;Prefix, ObjectID) VALUES(''&quot; &amp; strControlname &amp; &quot;'', &quot; &amp; lngControltype &amp; &quot;, ''&quot; _\r\n                        &amp; strControlsource &amp; &quot;'', ''&quot; &amp; strPrefix &amp; &quot;'', &quot; &amp; lngObjectID &amp; &quot;)&quot;, dbFailOnError\r\n                End If\r\n            End Select\r\n        Next ctl\r\n        If lngObjecttype = 2 Then\r\n            DoCmd.Close acForm, strObjectname\r\n        Else\r\n            DoCmd.Close acReport, strObjectname\r\n        End If\r\n    End If\r\nEnd Sub<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_06\/Add-Ins-web-images\/pic005_opt.jpeg\" alt=\"pic005.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Die beiden Tabellen der Add-In-Datenbank<\/span><\/b><\/p>\n<p>Dann &ouml;ffnet sie das Objekt mit der dem Objekttyp entsprechenden Anweisung und durchl&auml;uft alle enthaltenen Steuerelemente. Dabei untersucht sie nur die Kontrollk&auml;stchen, Kombinationsfelder, Listenfelder und Textfelder und pr&uuml;ft, ob der Wert der Eigenschaft <b>Name <\/b>dem Wert der Eigenschaft <b>ControlSource <\/b>entspricht.<\/p>\n<p>Ist das der Fall, legt die Routine einen neuen Eintrag in der Tabelle <b>tblControls <\/b>an (siehe Bild 5).<\/p>\n<p>Nachdem die Routine <b>ScanObject <\/b>f&uuml;r alle Formulare und Berichte je einmal aufgerufen wurde, untersucht die Prozedur <b>ScanDatabase <\/b>aus Listing 1 noch, ob die Tabelle <b>tblObjects <\/b>Eintr&auml;ge aufweist, f&uuml;r die die Tabelle <b>tblControls <\/b>keine Steuerelemente enth&auml;lt. Die beiden Routinen zum F&uuml;llen der beiden Tabellen <b>tblObjects <\/b>und <b>tblControls <\/b>werden erstmalig beim &Ouml;ffnen des Formulars ausgel&ouml;st. Im gleichen Zuge sorgt die Routine <b>InitializeForm<\/b> (s. Listing 3) daf&uuml;r, dass das Kombinationsfeld <b>cboObjects <\/b>aktualisiert wird und nunmehr alle in der Tabelle <b>tblObjects <\/b>enthaltenen Datens&auml;tze anzeigt.<\/p>\n<p class=\"kastentabelleheader\">Listing 3: InitializeForm f&uuml;llt mit ScanDatabases die Tabellen des Add-Ins und aktualisiert dann deren Steuerelemente.<\/p>\n<pre>Private Sub InitializeForm()\r\n    ScanDatabase\r\n    Me!cboObjects.Requery\r\n    Me!cboObjects = Me!cboObjects.ItemData(0)\r\n    FillControls\r\nEnd Sub<\/pre>\n<p><b>InitializeForm <\/b>ruft weiterhin die Routine <b>FillControls <\/b>auf, die dem Listenfeld <b>lstControls <\/b>einen neuen SQL-Ausdruck als Datensatzherkunft zuweist (s. Listing 4). Dieser besteht aus allen Datens&auml;tzen der Tabelle <b>tblControls<\/b>, deren <b>ObjectID <\/b>mit dem im Kombinationsfeld angezeigten Datensatz der Tabelle <b>tblObjects <\/b>&uuml;bereinstimmt.<\/p>\n<p class=\"kastentabelleheader\">Listing 4: Die Routine FillControls aktualisiert die Datensatzherkunft des Listenfelds lstControls in Abh&auml;ngigkeit vom Kombinationsfeld cboObjects.<\/p>\n<pre>Private Sub FillControls()\r\n    Dim strSQL As String\r\n    strSQL = &quot;SELECT ID, Controlname AS [Aktuelle Bezeichnung], &quot; _\r\n         &amp; &quot;Prefix &amp; Controlname AS [Neue Bezeichnung] &quot; _\r\n         &amp; &quot;FROM tblControls WHERE ObjectID = &quot; &amp; Me!cboObjects\r\n    Me!lstControls.RowSource = strSQL\r\nEnd Sub<\/pre>\n<p>Der Benutzer braucht nun nur noch die gew&uuml;nschten Steuerelemente zu markieren und auf die Schaltfl&auml;che <b>cmdChangeNames <\/b>zu klicken:<\/p>\n<p>Dies l&ouml;st die entsprechende Ereignisprozedur aus, die &uuml;ber die Routine <b>ChangeNames<\/b> zun&auml;chst das entsprechende Formular oder den Bericht &ouml;ffnet und dann &uuml;ber die Auflistung der Steuerelemente die Bezeichnungen der betroffenen Steuerelemente um das jeweilige Pr&auml;fix erg&auml;nzt (Routine <b>ChangeName<\/b>, alle Listing 5).<\/p>\n<p class=\"kastentabelleheader\">Listing 5: Diese Routinen sind f&uuml;r das &auml;ndern der Steuerelementnamen verantwortlich und erg&auml;nzen diese jeweils um das entsprechende Pr&auml;fix.<\/p>\n<pre>Private Sub cmdChangeNames_Click()\r\n    If MsgBox(&quot;Achtung: Dies &auml;ndert die Namen der links markierten gebundenen Steuerelemente.&quot; _\r\n              &amp; vbCrLf &amp; &quot;Eventuelle &auml;nderungen am Quellcode m&uuml;ssen Sie selbst durchf&uuml;hren.&quot; _\r\n            &amp; vbCrLf &amp; &quot;Fortfahren&quot;, _\r\n            vbYesNo + vbCritical, &quot;&auml;nderung von Steuerelementnamen&quot;) = vbYes Then\r\n        ChangeNames\r\n    End If\r\nEnd Sub\r\nPrivate Sub ChangeNames()\r\n    '' ... Deklaration ...\r\n    Set dbAddin = CodeDb\r\n    lngObjectID = Me!cboObjects\r\n    lngObjecttype = dbAddin.OpenRecordset(&quot;SELECT Objecttype FROM tblObjects WHERE ID = &quot; _\r\n        &amp; lngObjectID).Fields(0)\r\n    strObjectname = dbAddin.OpenRecordset(&quot;SELECT Objectname FROM tblObjects WHERE ID = &quot; _\r\n        &amp; lngObjectID).Fields(0)\r\n    Select Case lngObjecttype\r\n        Case 2 ''Formular\r\n            DoCmd.OpenForm strObjectname, view:=acDesign, WindowMode:=acHidden\r\n            Set obj = Forms(strObjectname)\r\n            For Each var In Me!lstControls.ItemsSelected\r\n                ChangeName obj, Me!lstControls.ItemData(var)\r\n            Next var\r\n            DoCmd.Close acForm, strObjectname, acSaveYes\r\n        Case Else\r\n            DoCmd.OpenReport strObjectname, view:=acViewDesign, WindowMode:=acHidden\r\n            Set obj = Reports(strObjectname)\r\n            For Each var In Me!lstControls.ItemsSelected\r\n                ChangeName obj, Me!lstControls.ItemData(var)\r\n            Next var\r\n            DoCmd.Close acReport, strObjectname, acSaveYes\r\n    End Select\r\n    InitializeForm\r\nEnd Sub\r\nPrivate Sub ChangeName(obj As Object, lngControlID As Long)\r\n    Dim strControlname As String\r\n    Dim dbAddin As DAO.Database\r\n    Dim strPrefix As String\r\n    Set dbAddin = CodeDb\r\n    strControlname = dbAddin.OpenRecordset(&quot;SELECT Controlname FROM tblControls WHERE ID = &quot; _\r\n        &amp; lngControlID).Fields(0)\r\n    strPrefix = dbAddin.OpenRecordset(&quot;SELECT Prefix FROM tblControls WHERE ID = &quot; _\r\n        &amp; lngControlID).Fields(0)\r\n    obj.Controls(strControlname).Name = strPrefix &amp; strControlname\r\nEnd Sub<\/pre>\n<p><b>Zugriff auf Host- und Add-In-Datenbank: CurrentDB vs. CodeDB, Currentproject vs. Codeproject und die Dom&auml;nenfunktionen<\/b><\/p>\n<p>Die Routine aus Listing 1 liefert ein gutes Beispiel daf&uuml;r, dass man es bei der Arbeit mit Access-Add-Ins gleich mit zwei Datenbanken zu tun hat: mit der Host-Anwendung, also der Access-Datenbank, von der aus man das Add-In aufruft, und mit der Add-In-Datenbank selbst.<\/p>\n<p>Es kann passieren, dass ein Add-In auf die Tabellen der Host-Datenbank sowie auch auf die eigenen Tabellen zugreift, und genauso kann es vorkommen, dass das Add-In Objekte wie Formulare und Berichte aus Host- und Add-In-Datenbank referenzieren muss.<\/p>\n<p>Der Zugriff auf die in Tabellen gespeicherten Daten geschieht per VBA normalerweise &uuml;ber das <b>Database<\/b>-Objekt, das man beim allt&auml;glichen Umgang mit Access-Datenbanken &uuml;ber die Funktion <b>CurrentDB <\/b>bezieht. Dar&uuml;ber kommt man aber nicht an die Daten in der Add-In-Datenbank heran. Um das <b>Database<\/b>-Objekt der Add-In-Datenbank zu verwenden, braucht man die Funktion <b>CodeDB<\/b>, wie auch in der Routine <b>ScanDatabase <\/b>aus Listing 1 geschehen.<\/p>\n<p>Das Gleiche gilt f&uuml;r den Zugriff auf die Objekte: Wer etwa alle Formulare &uuml;ber die <b>AllForms<\/b>-Auflistung durchlaufen m&ouml;chte, bezieht sich dabei &uuml;blicherweise auf <b>CurrentProject<\/b>. Auch hierf&uuml;r gibt es ein Add-In-Pendant, n&auml;mlich <b>CodeProject<\/b>.<\/p>\n<p>Und worauf greifen eigentlich die Dom&auml;nenfunktionen wie <b>DLookup<\/b>, <b>DCount <\/b>oder <b>DMax <\/b>zu Diese beziehen sich immer auf die Host-Datenbank. Wenn Sie solche Funktionen mit den Daten in der Add-In-Datenbank verwenden, m&uuml;ssen Sie selbst Hand anlegen: Bauen Sie sich eigene Dom&auml;nenfunktionen wie im Beitrag <b>Schnelle Dom&auml;nenfunktionen <\/b>(Shortlink 644, Ausgabe 1\/2009) beschrieben, und beziehen Sie sich darin auf <b>CodeDB<\/b> statt auf <b>CurrentDB<\/b>. Solche Funktionen k&ouml;nnte man dann <b>CLookup <\/b>oder <b>CCount <\/b>nennen (wobei <b>C <\/b>f&uuml;r <b>CodeDB <\/b>steht). Im &Uuml;brigen sollten Sie sowieso eher mit den schnellen Ersatzfunktionen f&uuml;r die eingebauten Dom&auml;nenfunktionen arbeiten &#8230;<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieses Add-In steht in Versionen f&uuml;r Access 2007 sowie f&uuml;r Access 2000 bis 2003 zur Verf&uuml;gung. Sie sollten es unmittelbar nach dem Hinzuf&uuml;gen gebundener Steuerelemente zu einem Formular oder Bericht verwenden, um deren Steuerelementnamen um ein Pr&auml;fix zu erweitern. Wenn ein gebundenes Steuerelement einen anderen Namen als das dadurch repr&auml;sentierte Feld hat, sind Sie auf jeden Fall auf der richtigen Seite, wenn Sie entweder auf das Steuerelement oder auf das darin angezeigte Feld zugreifen m&ouml;chten. Wenn Sie andere Ideen f&uuml;r n&uuml;tzliche Add-Ins haben, k&ouml;nnen Sie dieses hier als Vorlage verwenden: F&uuml;llen Sie es einfach mit der ben&ouml;tigten Benutzeroberfl&auml;che und legen Sie die passenden Funktionen an. Hilfreich ist dabei sicher ein Blick in unseren Kasten <b>Zugriff auf Host- und Add-In-Datenbank &#8230;<\/b>, der einige Besonderheiten beim Zugriff auf die Daten und Objekte der beim Einsatz eines Add-Ins beteiligten Datenbanken aufzeigt.<\/p>\n<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ControlRenamer.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/F8A71A36-57C6-43B3-A996-FB0860EC5DD2\/aiu_643.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wollen Sie Access um Funktionen erweitern, stehen Sie vor der Entscheidung, ob Sie ein Access-Add-In oder ein COM-Add-In bauen. Ersteres ist dem Access-Entwickler nat&uuml;rlich lieber, weil er sich nicht auf ungewohntes Terrain begeben muss. Wir zeigen am Beispiel eines Steuerelement-Rename-Tools, was Sie beim Bau eines Access-Add-Ins beachten m&uuml;ssen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662008,66062008,44000028,44000027,44000025],"tags":[],"class_list":["post-55000643","post","type-post","status-publish","format-standard","hentry","category-662008","category-66062008","category-Ergonomie_und_Benutzeroberflaeche","category-Loesungen","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Access-Add-Ins - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/AccessAddIns\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Access-Add-Ins\" \/>\n<meta property=\"og:description\" content=\"Wollen Sie Access um Funktionen erweitern, stehen Sie vor der Entscheidung, ob Sie ein Access-Add-In oder ein COM-Add-In bauen. Ersteres ist dem Access-Entwickler nat&uuml;rlich lieber, weil er sich nicht auf ungewohntes Terrain begeben muss. Wir zeigen am Beispiel eines Steuerelement-Rename-Tools, was Sie beim Bau eines Access-Add-Ins beachten m&uuml;ssen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/AccessAddIns\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-22T16:20:45+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Access-Add-Ins\",\"datePublished\":\"2021-03-22T16:20:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/\"},\"wordCount\":2522,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/cbdf64ad40774fd49d8478652029034b\",\"articleSection\":[\"2008\",\"6\\\/2008\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"L\u00f6sungen\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/\",\"name\":\"Access-Add-Ins - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/cbdf64ad40774fd49d8478652029034b\",\"datePublished\":\"2021-03-22T16:20:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/cbdf64ad40774fd49d8478652029034b\",\"contentUrl\":\"http:\\\/\\\/vg04.met.vgwort.de\\\/na\\\/cbdf64ad40774fd49d8478652029034b\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/AccessAddIns\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access-Add-Ins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Access-Add-Ins - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/","og_locale":"de_DE","og_type":"article","og_title":"Access-Add-Ins","og_description":"Wollen Sie Access um Funktionen erweitern, stehen Sie vor der Entscheidung, ob Sie ein Access-Add-In oder ein COM-Add-In bauen. Ersteres ist dem Access-Entwickler nat&uuml;rlich lieber, weil er sich nicht auf ungewohntes Terrain begeben muss. Wir zeigen am Beispiel eines Steuerelement-Rename-Tools, was Sie beim Bau eines Access-Add-Ins beachten m&uuml;ssen.","og_url":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-03-22T16:20:45+00:00","og_image":[{"url":"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Access-Add-Ins","datePublished":"2021-03-22T16:20:45+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/"},"wordCount":2522,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b","articleSection":["2008","6\/2008","Ergonomie und Benutzeroberfl\u00e4che","L\u00f6sungen","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/AccessAddIns\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/","url":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/","name":"Access-Add-Ins - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#primaryimage"},"thumbnailUrl":"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b","datePublished":"2021-03-22T16:20:45+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/AccessAddIns\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#primaryimage","url":"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b","contentUrl":"http:\/\/vg04.met.vgwort.de\/na\/cbdf64ad40774fd49d8478652029034b"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/AccessAddIns\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Access-Add-Ins"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000643"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000643\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}