{"id":55001136,"date":"2018-08-01T00:00:00","date_gmt":"2020-05-13T21:11:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1136"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"TreeView_64bit_ist_da__Anwendungen_umruesten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/","title":{"rendered":"TreeView 64bit ist da &#8211; Anwendungen umr&uuml;sten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Es ist geschehen: Jahre nach der Einf&uuml;hrung der ersten 64bit-Version von Microsoft Access (wer erinnert sich noch) hat Microsoft die 64bit-Version auch mit einer passenden Version der Bibliothek MSCOMCTL.ocx versehen. Das Fehlen von TreeView, ListView und Co. war bisher einer der Hauptgr&uuml;nde, nicht auf 64bit zu wechseln. Derweil gehen dennoch viele Unternehmen diesen Schritt &#8211; meist vermutlich einfach, um eine &#8222;modernere&#8220; Version von Access zu nutzen. Hier und da vernimmt man allerdings auch Stimmen, dass die 64bit-Version an verschiedenen Stellen Probleme vermeidet, die unter der 32bit-Version aufgetreten sind. In diesem Beitrag schauen wir uns an, was beim Einsatz von Steuerelementen der MSCOMCTL.ocx-Bibliothek zu beachten ist und wie Sie 32bit-Anwendungen fit machen f&uuml;r die 64bit-Version.<\/b><\/p>\n<p>Als ich von einem Entwicklerkollegen h&ouml;rte, dass es nunmehr endlich eine 64bit-Version der <b>MSCOMCTL.ocx <\/b>gibt, habe ich alles andere liegen lassen und eine virtuelle Maschine mit Office 2016 in der 64bit-Version ausgestattet. Anmerkung an dieser Stelle: Dies geschah mit einer Office-Version eines Office 365-Abonnements.<\/p>\n<h2>Experimente<\/h2>\n<p>Unter der 64bit-Version von Access habe ich also eine neue Datenbank erstellt, dieser ein Formular hinzugef&uuml;gt und dann tats&auml;chlich in der Liste der verf&uuml;gbaren ActiveX-Steuerelemente das TreeView-Steuerelement gefunden (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_001.png\" alt=\"Einf&uuml;gen des TreeView-Steuerelements unter 64bit\" width=\"499,6607\" height=\"358,1218\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Einf&uuml;gen des TreeView-Steuerelements unter 64bit<\/span><\/b><\/p>\n<p>Das so hinzugef&uuml;gte Steuer-element hat den Namen <b>ctlTreeView <\/b>bekommen. Um es zu testen, habe ich folgenden Code zum Klassenmodul des Formulars hinzugef&uuml;gt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     <span style=\"color:blue;\">Dim <\/span>objTreeView<span style=\"color:blue;\"> As <\/span>MSComctlLib.TreeView\r\n     <span style=\"color:blue;\">Set<\/span> objTreeView = Me!ctlTreeView.Object\r\n     objTreeView.Nodes.Add , , , \"Test\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis sehen Sie in Bild 2: Das TreeView wird angezeigt und funktioniert wie gew&uuml;nscht.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_002.png\" alt=\"Das TreeView-Steuerelement funktioniert!\" width=\"424,7115\" height=\"242,6923\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das TreeView-Steuerelement funktioniert!<\/span><\/b><\/p>\n<h2>TreeView: Von 32bit zu 64bit und zur&uuml;ck<\/h2>\n<p>Wir haben dann die unter der 64bit-Version von Access erstellte Datenbank auf ein System mit Access in der 32bit-Version von Access kopiert und gestartet. Das TreeView-Steuerelement dieser mit der 64bit-Version erstellten Datei funktioniert auch unter der 32bit-Version.<\/p>\n<p>Danach haben wir die gleiche Datei unter Access in der 32bit-Version erstellt und diese dann auf das mit der 64bit-Version ausgestattete System kopiert. Auch hier gelingt die Anzeige des TreeView-Steuerelements ohne Probleme.<\/p>\n<h2>Anwendung umr&uuml;sten<\/h2>\n<p>Damit sind die Voraussetzungen gegeben, einen genaueren Blick auf die Umr&uuml;stung einer Anwendung auf Basis von 32bit-Access auf die 64bit-Version zu werfen &#8211; oder gleich auf eine Umr&uuml;stung, die mit beiden Versionen kompatibel ist. Dazu nehmen wir uns als Beispiel die Ribbon-Admin-Anwendung vor, die eine Menge API-Code enth&auml;lt &#8211; und genau dieser ist in der Regel nicht kompatibel mit 64bit-Systemen, wenn er unter 32bit-Access geschrieben wurde.<\/p>\n<h2>Probleme im Code<\/h2>\n<p>Die offensichtlichen Probleme tauchen schon auf, wenn Sie die Moduls mit API-Deklarationen einer 32bit-Datenbank &ouml;ffnen &#8211; die API-Funktionen werden komplett rot markiert, was kein gutes Zeichen ist (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_003.png\" alt=\"Fehlerhaft markierte API-Funktionen\" width=\"700\" height=\"372,6852\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Fehlerhaft markierte API-Funktionen<\/span><\/b><\/p>\n<p>Der Men&uuml;befehl <b>Debuggen|Kompilieren <\/b>liefert dann genauere Informationen in Form einer Meldung (siehe Bild 4). Die Erl&auml;uterung ist eindeutig &#8211; wir sollen die Deklarationen mit dem Schl&uuml;sselwort <b>PtrSafe <\/b>erweitern. Nur wo Das ist nach kurzem Experimentieren beantwortet &#8211; n&auml;mlich zwischen <b>Declare <\/b>und <b>Function<\/b>\/<b>Sub<\/b>:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_004.png\" alt=\"Meldung beim Versuch, das Projekt zu debuggen\" width=\"424,7115\" height=\"203,6147\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Meldung beim Versuch, das Projekt zu debuggen<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function SendMessage Lib \"user32\" Alias \"SendMessageA\" (ByVal hwnd<span style=\"color:blue;\"> As Long<\/span>, _\r\nByVal wMsg<span style=\"color:blue;\"> As Long<\/span>, ByVal wParam<span style=\"color:blue;\"> As Long<\/span>, lParam<span style=\"color:blue;\"> As <\/span>Any)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Dies manuell zu erledigen ist nat&uuml;rlich eine langweilige Aufgabe. Also ziehen wir den <b>Suchen\/Ersetzen<\/b>-Dialog zur Unterst&uuml;tzung heran und geben im <b>Suchen nach<\/b>-Textfeld den Ausdruck <b>Declare Function <\/b>und im <b>Ersetzen durch<\/b>-Textfeld den Ausdruck <b>Declare PtrSafe Function <\/b>(siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_005.png\" alt=\"Suchen und Ersetzen \" width=\"424,7115\" height=\"183,5292\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Suchen und Ersetzen <\/span><\/b><\/p>\n<p>Der folgende Versuch, die Anwendung zu debuggen, liefert die <b>Declare Sub<\/b>-Deklarationen als fehlerhafte Zeilen. Also f&uuml;hren wir den Suchen\/Ersetzen-Vorgang nochmals durch, nur diesmal mit dem Suchbegriff <b>Declare Sub <\/b>und dem Ersetzungsausdruck <b>Declare PrtSafe Sub<\/b>.<\/p>\n<p>Danach versuchen wir erneut, die Anwendung zu kompilieren. Nun tauchen Fehler wie der in Bild 6 auf. Was ist hier das Problem<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_006.png\" alt=\"Unvertr&auml;gliche Typen\" width=\"499,6607\" height=\"275,5482\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Unvertr&auml;gliche Typen<\/span><\/b><\/p>\n<p>Um dies herauszufinden, schauen wir uns &uuml;ber den Kontextmen&uuml;-Eintrag <b>Definition<\/b> die Definition des markierten Elements an, hier der Funktion <b>VarPtr<\/b> (Bild 7). Diese erwartet als Parameter einen Wert des Typs <b>Any <\/b>und liefert einen Wert des Typs <b>LongPtr <\/b>zur&uuml;ck.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_007.png\" alt=\"Pr&uuml;fen der Datentypen von Parameter und R&uuml;ckgabewert\" width=\"424,7115\" height=\"295,7319\" \/><\/p>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Pr&uuml;fen der Datentypen von Parameter und R&uuml;ckgabewert<\/span><\/b><\/p>\n<p>Der Datentyp <b>LongPtr<\/b> ist 64bit-kompatibel und umfasst einen Wertebereich von 2 hoch 64, w&auml;hrend der 32bit-kompatible Datentyp <b>Long <\/b>nur 2 hoch 32 Werte umfasst.<\/p>\n<p>Warum aber macht die Funktion <b>VarPtr <\/b>nun Probleme Dazu schauen wir uns die Deklaration der API-Funktion <b>StringFromGUID2 <\/b>an, der wir das Ergebnis dieser Funktion als Parameter &uuml;bergeben. Diese sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function StringFromGUID2 Lib \"ole32.dll\" (rGUID<span style=\"color:blue;\"> As <\/span>Any, _\r\nByVal lpstrClsId<span style=\"color:blue;\"> As Long<\/span>, ByVal cbMax<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Wir sehen, dass der zweite Parameter dieser Funktion in der Deklaration den Datentyp <b>Long <\/b>hat. Im Aufruf der Funktion &uuml;bergeben wir aber den Datentyp <b>LongPtr<\/b>. Warum ist das nun ein Fehler, obwohl es ja zuvor unter der 32bit-Version von Access funktioniert hat Hier sind <b>LongPtr<\/b>-Variablen mit <b>Long<\/b>-Variablen kompatibel. Unter der 64bit-Version ist das allerdings nicht der Fall &#8211; hier k&ouml;nnten ja die <b>LongPtr<\/b>-Variablen mit Werten gef&uuml;llt sein, die nicht mehr in den Wertebereich einer <b>Long<\/b>-Variablen passen.<\/p>\n<p>Also m&uuml;ssen wir &uuml;berall, wo eine <b>LongPtr<\/b>-Variable vorkommt, die in einer API-Deklaration als Parameter verwendet wird, in der API-Deklaration auch von <b>Long <\/b>auf <b>LongPtr <\/b>umstellen. Also &auml;ndern wir hier den Datentyp des Parameters <b>lpstrClsId <\/b>von <b>Long <\/b>zu <b>LongPtr<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function StringFromGUID2 Lib \"ole32.dll\" (rGUID<span style=\"color:blue;\"> As <\/span>Any, _\r\nByVal lpstrClsId<span style=\"color:blue;\"> As Long<\/span>Ptr, ByVal cbMax<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Auf diese Weise schreiten wir weiter voran und ersetzen die Parameter des Datentyps <b>Long <\/b>durch den Datentyp <b>LongPtr<\/b>, wo es beim Kompilieren zu Problemen kommt.<\/p>\n<p>Das kann beispielsweise auch einmal in einer Variablen auf Basis eines <b>Type<\/b>-Elements geschehen (siehe Bild 8). Die Ursache des Problems liegt in den folgenden beiden <b>Type<\/b>-Deklarationen:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_008.png\" alt=\"Noch mehr unvertr&auml;gliche Typen, diesmal in einem Type\" width=\"599,593\" height=\"205,2793\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Noch mehr unvertr&auml;gliche Typen, diesmal in einem Type<\/span><\/b><\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Type EncoderParameters\r\n     count<span style=\"color:blue;\"> As Long<\/span>\r\n     Parameter<span style=\"color:blue;\"> As <\/span>EncoderParameter\r\nEnd Type\r\n<span style=\"color:blue;\">Private <\/span>Type EncoderParameter\r\n     UUID<span style=\"color:blue;\"> As <\/span>GUID\r\n     NumberOfValues<span style=\"color:blue;\"> As Long<\/span>\r\n     type<span style=\"color:blue;\"> As Long<\/span>\r\n     Value<span style=\"color:blue;\"> As Long<\/span>\r\nEnd Type<\/pre>\n<p>Hier m&uuml;ssen wir zumindest einmal den Datentyp des Elements <b>Value <\/b>von <b>Long <\/b>auf <b>LongPtr <\/b>&auml;ndern.<\/p>\n<p>Interessanterweise kommen wir nach wenigen &auml;nderungen schon an dem Punkt an, wo das Kompilieren ohne Probleme gelingt.<\/p>\n<p>Also starten wir die Anwendung, die gleich zu Beginn beispielsweise einige der GDI-API-Funktionen nutzt, um die Bilder f&uuml;r Kontextmen&uuml;s und TreeView bereitzustellen. Leider st&uuml;rzt Access dabei komplett ab &#8211; und das, obwohl wir doch erfolgreich kompiliert haben.<\/p>\n<p>Also bleibt uns nichts &uuml;ber, als schrittweise durch die beim Starten ausgef&uuml;hrten Anweisungen der Anwendung zu laufen und zu schauen, welche der Anweisungen den Fehler ausl&ouml;st, der zum Absturz f&uuml;hrt.<\/p>\n<p>Hier hat sich folgende Vorgehensweise bew&auml;hrt, wenn viel Code durchlaufen wird: Sie durchlaufen immer ein paar Anweisungen und setzen dann, bevor Sie fortfahren, einen fixen Haltepunkt in Form der Anweisung <b>Stop<\/b>. Danach das Speichern nicht vergessen, denn wenn sie nun weiterlaufen und die den Absturz ausl&ouml;sende Anweisung ausf&uuml;hren, wird eine nicht gespeicherte &auml;nderung am Code nat&uuml;rlich auch wieder verworfen. Am besten f&uuml;gen Sie also immer eine <b>Stop<\/b>-Anweisung ein, wenn die n&auml;chsten Anweisungen den Aufruf einer oder mehrerer API-Funktionen enthalten.<\/p>\n<p>Wenn Sie dann auf den Fehler sto&szlig;en, k&ouml;nnen Sie beim n&auml;chsten Start gleich schon einmal einige <b>Stop<\/b>-Anweisungen l&ouml;schen, die gegebenenfalls schon ohne Fehler durchlaufen werden konnten.<\/p>\n<p>In diesem Fall stellte sich heraus, dass der Aufruf der Funktion <b>GdipCreateHBITMAPFromBitmap <\/b>zum Absturz f&uuml;hrt. Also schauen wir uns an, welche Parameter diese enth&auml;lt und welche Datentypen diese haben. Dann gleichen wir diese mit den Datentypen der &uuml;bergebenen Variablen ab. Die Definition der API-Funktion sieht so aus:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GdipCreateHBITMAPFromBitmap Lib \"gdiplus\" (ByVal bitmap<span style=\"color:blue;\"> As Long<\/span>, _\r\nhbmReturn<span style=\"color:blue;\"> As Long<\/span>, ByVal background<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Wir haben also drei <b>Long<\/b>-Parameter und auch einen R&uuml;ckgabewert vom Typ <b>Long<\/b>. Der Aufruf lautet wie folgt:<\/p>\n<pre>GdipCreateHBITMAPFromBitmap lBitmap, hBmp, 0&<\/pre>\n<p><b>lBitmap <\/b>hat den Datentyp <b>Long<\/b>, <b>hBmp <\/b>hat den Datentyp <b>Long<\/b>. Wo also ist das Problem <b>lBitmap <\/b>hat aktuell den Wert <b>2.064.200.912<\/b>, <b>hBmp <\/b>den Wert <b>0<\/b>.<\/p>\n<p>Stellen wir versuchsweise die Datentypen der beiden Variablen um:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>lBitmap<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n<span style=\"color:blue;\">Dim <\/span>hBmp<span style=\"color:blue;\"> As Long<\/span>Ptr<\/pre>\n<p>Auch in der API-Deklaration &auml;ndern wir die Datentypen der entsprechenden Parameter:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GdipCreateHBITMAPFromBitmap Lib \"gdiplus\" (ByVal bitmap<span style=\"color:blue;\"> As Long<\/span>Ptr, _\r\nhbmReturn<span style=\"color:blue;\"> As Long<\/span>Ptr, ByVal background<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Damit ist alles gut Weit gefehlt. Nat&uuml;rlich wird die Funktion <b>GdipCreateHBITMAPFromBitmap <\/b>auch noch von anderen Stellen aus aufgerufen, und auch dort m&uuml;ssen wir die Datentypen &auml;ndern. Dummerweise werden die Variablen, deren Datentypen wir nun &auml;ndern, auch noch als Parameter f&uuml;r den Aufruf weiterer API-Funktionen genutzt. Also haben wir eine Menge Arbeit vor uns und hangeln uns nun durch die &auml;nderungen von Datentypen von Variablen und Parametern in den API-Deklarationen.<\/p>\n<p>Nach ein paar &auml;nderungen von <b>Long<\/b> in <b>LongPtr <\/b>wird die Kompilierung dann anstandslos durchgef&uuml;hrt und wir k&ouml;nnen erneut einen Start der Anwendung wagen. Im Falle der API-Funktion <b>GdipCreateHBITMAPFromBitmap<\/b> gelingt die Ausf&uuml;hrung nun. Also lassen wir die Anwendung nun weiterlaufen und setzen hier und da <b>Stop<\/b>-Anweisungen, um uns an den n&auml;chsten Absturz heranzutasten.<\/p>\n<p>Schlie&szlig;lich gelingt es dann, die Anwendung komplett zum Laufen zu bringen. Allerdings sollte man dann auch noch einmal alle Aspekte der Anwendung testen.<\/p>\n<h2>32bit- und 64bit-kompatibel<\/h2>\n<p>Die interessante Frage ist nun, ob die f&uuml;r 64bit vorbereitete Anwendung auch noch unter 32bit l&auml;uft. Also kopieren wir diese Anwendung wieder auf ein 32bit-System und probieren es dort aus.<\/p>\n<p>Interessanterweise funktioniert unsere Anwendung mit der Ersetzung der Datentypen <b>Long <\/b>durch <b>LongPtr <\/b>und die Erweiterung der API-Deklaration um das Schl&uuml;sselwort <b>PtrSafe<\/b>. Auch das Kompilieren funktioniert ohne Probleme.<\/p>\n<p>Dies gilt allerdings nur f&uuml;r die Verwendung von VBA ab Version 7. Da dies allerdings auch schon mindestens sechs Jahre alt ist, behandeln wir an dieser Stelle das Thema Kompatilit&auml;t mit VBA 6 so knapp wie m&ouml;glich.<\/p>\n<p>Es gibt sogenannte Kompilierungskonstanten sowie beispielsweise <b>If&#8230;Then&#8230;Else<\/b>-Konstrukte, die nur beim Kompilieren ausgef&uuml;hrt werden. Diese markieren Sie durch ein vorangestelltes Raute-Zeichen (<b>#<\/b>). Wenn Sie eine Anweisung also kompatibel f&uuml;r VBA 6 und VBA 7 bereitstellen wollen, verwenden Sie etwa die folgende <b>If&#8230;Then&#8230;Else<\/b>-Bedingung:<\/p>\n<pre>#If VBA7 Then\r\n     ''''64bit-Anweisungen\r\n#Else\r\n     ''''32bit-Anweisungen\r\n#End If<\/pre>\n<p>Wenn Sie also etwa eine API-Deklaration f&uuml;r beide VBA-Versionen bereitstellen wollen, gelingt dies etwa so:<\/p>\n<pre>#If VBA7 Then\r\n     <span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function _\r\n         CreateStreamOnHGlobal Lib \"ole32\" (ByVal hGlobal _\r\n        <span style=\"color:blue;\"> As Long<\/span>Ptr, ByVal fDeleteOnRelease<span style=\"color:blue;\"> As Long<\/span>, _\r\n         ByRef ppstm<span style=\"color:blue;\"> As <\/span>Any)<span style=\"color:blue;\"> As Long<\/span>\r\n#Else\r\n     <span style=\"color:blue;\">Private <\/span>Declare Function _\r\n         CreateStreamOnHGlobal Lib \"ole32\" (ByVal hGlobal _\r\n        <span style=\"color:blue;\"> As Long<\/span>, ByVal fDeleteOnRelease<span style=\"color:blue;\"> As Long<\/span>, _\r\n         ByRef ppstm<span style=\"color:blue;\"> As <\/span>Any)<span style=\"color:blue;\"> As Long<\/span>\r\n#End If<\/pre>\n<p>Bei der Variablendeklaration erledigen Sie das auf die gleiche Weise:<\/p>\n<pre>#If VBA7 Then\r\n     <span style=\"color:blue;\">Dim <\/span>lBitmap<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n#Else\r\n     <span style=\"color:blue;\">Dim <\/span>lBitmap<span style=\"color:blue;\"> As Long<\/span>\r\n#End If<\/pre>\n<h2>Versionen identifizieren<\/h2>\n<p>Wenn Sie nicht auf Anhieb wissen, welche Version von Access oder VBA Sie verwenden, k&ouml;nnen Sie dies schnell testen. Um die Access-Version zu ermitteln und speziell, ob Sie die 32bit- oder 64bit-Version nutzen, bet&auml;tigen Sie den Ribbon-Tab <b>Datei|Konto <\/b>und klicken dort auf die Schaltfl&auml;che <b>Info <\/b>zu Access. Der nun erscheinende Dialog aus Bild 9 liefert die Access-Version samt Hinweis auf die 32bit- oder 64bit-Version.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_010.png\" alt=\"Access-Version ermitteln\" width=\"424,7115\" height=\"166,3746\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Access-Version ermitteln<\/span><\/b><\/p>\n<p>Um die Version von VBA zu ermitteln, &ouml;ffnen Sie den VBA-Editor und bet&auml;tigen dort den Men&uuml;-Eintrag <b>|Microsoft Visual Basic for Applications-Info&#8230; <\/b>(siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1136_009.png\" alt=\"VBA-Version ermitteln\" width=\"424,7115\" height=\"217,5143\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: VBA-Version ermitteln<\/span><\/b><\/p>\n<h2>Kompilieren<\/h2>\n<p>Wenn Sie eine <b>.accde<\/b>-Version Ihrer Anwendung erstellen wollen, m&uuml;ssen Sie diese gegen die jeweilige Version kompilieren &#8211; also entweder 32bit oder 64bit. Sie m&uuml;ssen also jeweils zwei Versionen f&uuml;r die unterschiedlichen Access-Versionen bereithalten.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Das es nun eine Version der Bibliothek <b>MSCOMCTL.ocx <\/b>f&uuml;r die 64bit-Version von Access gibt, ist eine gute Nachricht. Endlich m&uuml;ssen Entwickler ihren Auftraggeber nicht mehr erkl&auml;ren, warum es keine gute Idee ist, die 64bit-Version von Office zu installieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Es ist geschehen: Jahre nach der Einf&uuml;hrung der ersten 64bit-Version von Microsoft Access (wer erinnert sich noch) hat Microsoft die 64bit-Version auch mit einer passenden Version der Bibliothek MSCOMCTL.ocx versehen. Das Fehlen von TreeView, ListView und Co. war bisher einer der Hauptgr&uuml;nde, nicht auf 64bit zu wechseln. Derweil gehen dennoch viele Unternehmen diesen Schritt &#8211; meist vermutlich einfach, um eine &#8222;modernere&#8220; Version von Access zu nutzen. Hier und da vernimmt man allerdings auch Stimmen, dass die 64bit-Version an verschiedenen Stellen Probleme vermeidet, die unter der 32bit-Version aufgetreten sind. In diesem Beitrag schauen wir uns an, was beim Einsatz von Steuerelementen der MSCOMCTL.ocx-Bibliothek zu beachten ist und wie Sie 32bit-Anwendungen fit machen f&uuml;r die 64bit-Version.<\/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":[662018,66042018,44000025],"tags":[],"class_list":["post-55001136","post","type-post","status-publish","format-standard","hentry","category-662018","category-66042018","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>TreeView 64bit ist da - Anwendungen umr&uuml;sten - 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\/TreeView_64bit_ist_da__Anwendungen_umruesten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TreeView 64bit ist da - Anwendungen umr&uuml;sten\" \/>\n<meta property=\"og:description\" content=\"Es ist geschehen: Jahre nach der Einf&uuml;hrung der ersten 64bit-Version von Microsoft Access (wer erinnert sich noch) hat Microsoft die 64bit-Version auch mit einer passenden Version der Bibliothek MSCOMCTL.ocx versehen. Das Fehlen von TreeView, ListView und Co. war bisher einer der Hauptgr&uuml;nde, nicht auf 64bit zu wechseln. Derweil gehen dennoch viele Unternehmen diesen Schritt - meist vermutlich einfach, um eine &quot;modernere&quot; Version von Access zu nutzen. Hier und da vernimmt man allerdings auch Stimmen, dass die 64bit-Version an verschiedenen Stellen Probleme vermeidet, die unter der 32bit-Version aufgetreten sind. In diesem Beitrag schauen wir uns an, was beim Einsatz von Steuerelementen der MSCOMCTL.ocx-Bibliothek zu beachten ist und wie Sie 32bit-Anwendungen fit machen f&uuml;r die 64bit-Version.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:11:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e\" \/>\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=\"10\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"TreeView 64bit ist da &#8211; Anwendungen umr&uuml;sten\",\"datePublished\":\"2020-05-13T21:11:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/\"},\"wordCount\":1816,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d08c325f363640ca8a27eb7a59e4922e\",\"articleSection\":[\"2018\",\"4\\\/2018\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/\",\"name\":\"TreeView 64bit ist da - Anwendungen umr&uuml;sten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d08c325f363640ca8a27eb7a59e4922e\",\"datePublished\":\"2020-05-13T21:11:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d08c325f363640ca8a27eb7a59e4922e\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/d08c325f363640ca8a27eb7a59e4922e\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeView_64bit_ist_da__Anwendungen_umruesten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TreeView 64bit ist da &#8211; Anwendungen umr&uuml;sten\"}]},{\"@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":"TreeView 64bit ist da - Anwendungen umr&uuml;sten - 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\/TreeView_64bit_ist_da__Anwendungen_umruesten\/","og_locale":"de_DE","og_type":"article","og_title":"TreeView 64bit ist da - Anwendungen umr&uuml;sten","og_description":"Es ist geschehen: Jahre nach der Einf&uuml;hrung der ersten 64bit-Version von Microsoft Access (wer erinnert sich noch) hat Microsoft die 64bit-Version auch mit einer passenden Version der Bibliothek MSCOMCTL.ocx versehen. Das Fehlen von TreeView, ListView und Co. war bisher einer der Hauptgr&uuml;nde, nicht auf 64bit zu wechseln. Derweil gehen dennoch viele Unternehmen diesen Schritt - meist vermutlich einfach, um eine \"modernere\" Version von Access zu nutzen. Hier und da vernimmt man allerdings auch Stimmen, dass die 64bit-Version an verschiedenen Stellen Probleme vermeidet, die unter der 32bit-Version aufgetreten sind. In diesem Beitrag schauen wir uns an, was beim Einsatz von Steuerelementen der MSCOMCTL.ocx-Bibliothek zu beachten ist und wie Sie 32bit-Anwendungen fit machen f&uuml;r die 64bit-Version.","og_url":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:11:10+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"10\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"TreeView 64bit ist da &#8211; Anwendungen umr&uuml;sten","datePublished":"2020-05-13T21:11:10+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/"},"wordCount":1816,"commentCount":2,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e","articleSection":["2018","4\/2018","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/","url":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/","name":"TreeView 64bit ist da - Anwendungen umr&uuml;sten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e","datePublished":"2020-05-13T21:11:10+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/d08c325f363640ca8a27eb7a59e4922e"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/TreeView_64bit_ist_da__Anwendungen_umruesten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"TreeView 64bit ist da &#8211; Anwendungen umr&uuml;sten"}]},{"@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\/55001136","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=55001136"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001136\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}