Language: Deutsch English















Last Update: 2021 - 10 - 29





Download VBA and Access samples

Inhalt

  • Rot 13 Wandler
  • Access-SystraySample
  • Access-SyncScrollBarsSample
  • Sleep
  • Monitor Settings Demo
  • Tastatur Status Demo
  • MS Office Automation - VBA-Module der Konstanten
  • Datumsformat aus den Windows Regionseinstellungen auslesen - VBA/API Beispiel
  • Suchfeld in der Navigationsleiste eines Access Formulars ausblenden
  • CDO-Bibliothek-Konstanten - Download
  • Dateien Asynchron Kopieren mit der FileCopyEx-API-Funktion - 64Bit-kompatibel



  • Rot 13 Wandler

    Der ROT13Wandler ist ein kleines Programm, das ich geschrieben habe um ein wenig Delphi zu lernen. Er dient dazu, einen Text mit dem 'Verschlüsselungsverfahren' ROT13 zu codieren.

    ROT13 wird dazu verwendet um z.B. in Newsbeiträgen Texte unterzubringen, die jeder lesen kann, aber nur dann wenn er wirklich will. Z.B. die Lösung eines Rätsels das man im gleichen Artikel veröffentlicht hat, oder Informationen über ein Buch, einen Film o.ä., der der breiten Öffentlichkeit noch nicht zugänglich ist. Um durch die Veröffentlichung dieser Infomationen niemanden den Spaß zu verderben, kann der Absender sie mit ROT13 verschlüsseln. Der Empfänger muss sie entschlüsseln um sie lesen zu können.

    ROT13 ist natürlich kein echtes Verschlüsselungsverfahren. Ein Text wird mit ROT13 verschlüsselt indem jeder Buchstabe um 13 Stellen im Alphabet verschoben wird. Also aus 'A' wird 'N', aus 'B' wird 'O' usw.

    Jeder mir bekannter Newsreader kann ROT13-codierten Text entschlüsseln, allerdings gibt es einige Programme, die nicht in der Lage sind, Text mit ROT13 zu verschlüsseln. Für alle, die ein solches Programm verwenden, kann der ROT13Wandler nützlich sein, denn er ermöglicht es Text mit ROT13 zu verschlüsseln und dann über Copy&Paste in ein anderes Programm einfügen.

    Ursprünglich gab es hier nur das kompilierte Binary zum Download, da ich nicht damit gerechent hatte, dass sich tatsächlich jemand für meine ersten Gehversuche in Delphi interessieren könnte. Da ich aber inzwischen einige Anfragen erhalten habe, in denen ich um den Quellcode dieser Anwendung gebeten wurde, habe ich diesen jetzt auch hier veröffentlicht. Der Quellcode der Anwendung ist trivial, daher gestatte ich es ausdrücklich den Quellcode ohne Einschränkungen zu verändern, in eingenen Anwendungen weiterzuverwenden, oder an anderer Stelle bzw. in anderen Medien zu veröffentlichen. - Dennoch würde ich mich darüber freuen, wenn ich über eine Veröffentlichung an einem anderen Ort kurz per Email informiert werden würde.

    Download Binary Für Win9x/WinNT (166KB) - [aktuelle Version: 0.1.1.2 vom 28.12.2000]
    Download Sourcecode (10KB) - [aktuelle Version: 0.1.1.2 vom 28.12.2000]



    Zurück zur Übersicht

    Access-SystraySample

    Dieses Sample zeigt, wie man ein Icon für eine AccessDB, unter Verwendung von API-Funktionen, im Systray (die korrekte Bezeichnung ist "Notification Area") unterbringen kann. Außerdem werden gängige Zusatzfunktionen (Ausblenden des Anwendungsfensters, Wiederherstellen des Fensters durch Doppelklick auf das Systray-Icon, Kontextmenü für Systray-Icon) demonstriert.

    Das SystraySample ist eine MS-Access-Datenbank mit offenem Code. Um Zugriff auf den Quellcode der Anwendung zu erhalten, muss beim Öffnen die [SHIFT]-Taste gedrückt werden.

    Das Sample wurde von mir erstellt und ist frei von den Rechten Dritter. Der Quellcode (oder Teile davon) darf als Teil einer eigenen Anwendung weitergegeben werden. Eine Veröffentlichung dieses Beispiels ist, unabhängig von der Art und dem Medium der Veröffentlichung, nur mit der schriftlichen Genehmigung des Autors gestattet.

    Falls du Erweiterungen und/oder Verbesserungen an dem Sample vornimmst, würde ich mich sehr darüber freuen, wenn du diese Änderungen auch der Öffentlichkeit zur Verfügung stellen würdest.

    Download Für MS Access 2000 (42KB) - [Version: 0.8.2 vom 24.11.2001]
    Download Für MS Access 97 (55KB) - [Version: 0.8.2.1 vom 24.12.2001]

    Erweiterung für Balloon Tool Tips

    Auf Anfrage eines Besuchers dieser Seite habe ich das Beispiel kurzfristig erweitert, um zu demonstrieren wie man in Kombination mit dem Icon im Systray (Notification Area) die Funktionalität der Balloon Tool Tips (die "Sprechblasen" der Icons) nutzen kann.

    Achtung: Diese Version des Beispiels funktioniert nur auf Rechnern mit Version 5.0 (oder höher) der Shell32.DLL. (d.h. ab Windows 2000 oder mit Internet Exporer 5.0)

    Diese Version ist mit Access XP, Access 2003 und Access 2016 getestet, sollte aber auch bereits mit Access 2000 funktionieren.

    Download Systray-Balloon (ca. 40KB) - [Version: 0.9.0.1 vom 05.03.2006]

    Ein Hinweis bzgl. neuerer Windows Versionen

    Dieses Beispiel funktioniert auch auf neueren Windows Versionen (7-10). Allerdings gibt es ein Problem, wenn das Icon in dem Überlaufbereich (overflow section) der Notification Area angezeigt wird. Es wird dann nicht auf Mausereignisse reagieren und deshalb das Kontextmenü nicht anzeigen und das Formular bei einem Doppelklick nicht einblenden.

    Die Ursache dafür ist, dass diese Funktionen im Detailbereich-MouseMove-Ereignis aufgerufen werden, aber nur dann, wenn sich der Mauszeiger über der Notification Area in der Taskbar befindet. – Das tut er aber nicht, wenn das Icon im Überlaufbereich angezeigt wird.

    Es könnte eine Lösung sein, wenn man in Access ein weiteres, unsichtbares Formular erstellt (und öffnet), dass nur die Mausereignisse des Icons in der Notification Area behandelt.  Du musst dann das Window Handle (hWnd) dieses Forms in der NOTIFYICONDATA Struktur verwenden.

    Dies ist vorerst nur eine ungetestete Idee. Ich werde versuchen das zu implementieren, wenn ich die Zeit dazu finde.



    Zurück zur Übersicht

    Access-SyncScrollBarsSample

    In dieser Beispiel-Anwendung zeige ich, wie man die ScrollBars in zwei verschiedenen Access-Formularen mit Hilfe von API-Funktionen synchronisieren kann. D.h. wenn die ScrollBar in dem einem Formular manuell mit der Maus bewegt wird, wird die ScrollBar in dem zweiten Formular automatisch an die entsprechende Position bewegt.

    Dieses Beispiel ist als kurze "Machbarkeitsstudie" auf eine Anfrage in den Access-Newsgroups entstanden. Bisher hatte ich nicht die Zeit und die Lust, den Quellcode zu kommentieren. Wer dieses Beispiel an seine Bedürfnisse anpassen möchte, wird sich also selbst ein wenig in den Code einarbeiten müssen.

    Die Beispielanwendung steht nur im Access-2000-Format zur Verfügung, da im Code der AddressOf-Operator für Callback-API-Funktionen verwendet wird, der in Access 97 und früheren Versionen noch nicht vorhanden ist. Wer den Code dieses Beispiels in Access97 verwenden möchte kann dazu die CallBack-Funktionalität über undokumentierte Funktionen der Office97-DLLs erreichen. Michael Kaplan hat auf seiner Website ein Beispiel veröffentlicht, dass diesen Ansatz illustriert.

    Das SyncScrollSample ist eine MS-Access-Datenbank mit offenem Code. Das Sample wurde von mir erstellt und ist frei von den Rechten Dritter. Der Quellcode (oder Teile davon) darf als Teil einer eigenen Anwendung weitergegeben werden. Eine Veröffentlichung dieses Beispiels ist, unabhängig von der Art und dem Medium der Veröffentlichung, nur mit der schriftlichen Genehmigung des Autors gestattet.

    Falls du Erweiterungen und/oder Verbesserungen an dem Sample vornimmst, würde ich mich sehr darüber freuen, wenn du diese Änderungen auch der Öffentlichkeit zur Verfügung stellen würdest.

    Download Für MS Access 2000 (43KB) - [Version vom 21.08.2003]

    Update für Access 2007+

    I habe kürzlich festgestellt, dass dieser Demo-Download mit Access 2007 und neueren Version nicht mehr funktioniert. Hier ist nun eine angepasste Version für Access 2007 und später. Diese neue Version sollte mit älteren Access-Versionen ebenfalls funktionieren, aber ich habe keine mehr installiert, um das zu testen. Daher lasse ich die alte Version weiterhin für den Download online.

    Download für Mircosoft Access 2007 and neuer - [veröffentlicht 2016-03-30]



    Zurück zur Übersicht

    Sleep

    Du kennst sicherlich die Sleep-Funktion von Radioweckern, Stereoanlagen, etc., die nach einer gewissen Zeit das Gerät ausschalten. Genau diese Funktionalität stellt diese kleine Anwedung für zur Verfügung. Nach der eingestellten Zeitspanne wird der Rechner heruntergehfahren und, wenn die Hardware das unterstüzt, ausgeschaltet.

    Diese Beispielanwendung ist in Visual Basic geschrieben, die wesentliche Funktionalität wird jedoch über API-Funktionen umgesetzt, daher kann der Code ohne wesentliche Änderungen auch nach Microsoft Access übernommen werden.
    Die Anwendung habe ich auf einem Rechner mit Microsoft Windows XP entwickelt und bisher nur auf einem solchen System getestet. Daher kann ich nicht gewährleisten, dass die Anwendung auch unter andern Windows-Betriebssystemen funktioniert.

    Technische Infos: Der Beispielcode verwendet die ExitWindowsEx-API-Funktion für den System-Shutdown. In diesem Zusammenhang ist natürlich auch der notwendige Code enthalten, um mit der AdjustTokenPrivileges-API-Funktion für den Prozess das "SE_SHUTDOWN_NAME privilege" zu erlangen, das auf Rechnern mit NT-basierenden Betriebssystem erforderlich ist, um das System herunterzufahren.

    Das Archiv enthält die kompilierte Visual-Basic-EXE, sowie den kompletten Quellcode der Anwendung. Die Anwendung wurde von mir erstellt und ist frei von den Rechten Dritter. Der Quellcode (oder Teile davon) darf als Teil einer eigenen Anwendung weitergegeben werden, sofern deren wesentlicher Zweck nicht eine Reproduktion dieses Beispiels ist. Eine Veröffentlichung dieses Beispiels ist, unabhängig von der Art und dem Medium der Veröffentlichung, nur mit der schriftlichen Genehmigung des Autors gestattet.

    Falls du Erweiterungen und/oder Verbesserungen an dem Sample vornimmst, würde ich mich sehr darüber freuen, wenn du diese Änderungen auch der Öffentlichkeit zur Verfügung stellen würdest.

    Download (12KB) - [Version 1.0.10 vom 22.08.2003]



    Zurück zur Übersicht

    Monitor Settings Demo

    Dies ist ein VBA-Code-Demo, das zeigt, wie du die High-Level Monitor Configuration Functions der Windows API verwenden kannst. Diese Funktionen sind ab Windows Vista verfügbar.

    Bisher zeigt diese Beispiel nur wie man die Helligkeits- (SetMonitorBrightness) und den Kontrast-Einstellungen (SetMonitorContrast) des Monitors auslesen und setzen kann. Wenn du andere Monitoreinstellungen über die Windows API bearbeiten willst, kann dieses Beispiel ein guter Ausgangspunkt für eine eigene Implementierung sein.

    Diese Beispieldatenbank ist mit Microsoft Access 2010 und 2013 getestet worden. Sie funktioniert wahrscheinlich ebenfalls mit anderen aktuellen Version von Microsoft Access. Die Kernfunktionalität ist in einem einzelnen VBA Klassenmodul enthalten, das auch in anderen VBA-fähigen Anwendungen funktionieren sollte.

    Die meisten modernen Monitore unterstützen diese Funktionen der Windows API. Einige etwas ältere Monitore tun dies allerdings nicht. Von meinem Samsung SyncMaster P2770HD werden die API-Funktionen problemlos unterstützt, aber nicht von einem älteren LG Flatron L2000CE.

    Du darfst den Code aus diesem Demo in deiner eigenen Anwendung verwenden und mit ihr vertreiben, solange der enthaltene Copyright-Hinweis unverändert erhalten bleibt. Es ist jedoch nur mit meiner ausdrücklichen Genehmigung gestattet, dieses Beispiel selbst weiter zu verteilen oder an anderer Stelle zu veröffentlichen.

    Monitor Settings Demo herunterladen (AccDB-Format, 31 KB).



    Zurück zur Übersicht

    Tastatur Status Demo

    Hier ist ein sehr einfaches Demo, um zu zeigen wie man den aktuellen Zustand der Tastatur auslesen und setzen kann (Umschalttaste, Num-Lock und Scroll-Lock („Rollen“)). Seine Kernfunktionalität ist eine Wrapper-Klasse um die Windows API Funktionen GetKeyboardState, SetKeyboardState and keybd_event.

    Dieses Beispiel basiert auf Beispielcode der von Microsoft als KB177674 veröffentlicht wurden. (zuvor veröffentlicht als Q177674).

    Meiner Meinung nach ist das o.g. Beispiel in der MSKB für Anfänger ein bisschen schwer zu verstehen. Alle drei Tastatur-Lock-Zustände werden in einer einzigen Prozedur behandelt und es ist nicht intuitiv zu erkennen, welcher Code für das Lesen der aktuellen Werte und welcher für das Setzen der neuen Werte verantwortlich ist.

    Solange du das Beispiel nicht vollständig verstanden hast, ist der Originalcode nur schwer anzupassen und in deine eigene Anwendung zu integrieren. Also habe ich den ursprünglichen Beispielcode vereinfacht und ihn in eine wiederverwendbare Klasse gekapselt. Diese Klasse kannst du in dein eigenes Projekt importieren und dort direkt verwenden, ohne die innere Logik der Klasse anzupassen.

    Wenn du diese Klasse in dein Projekt übernehmen willst, solltest du nicht einfach den Code Kopieren&Einfügen, sondern das ganze Klassenmodul Keyboardstate in deine Datenbank importieren, entweder über den Button Externe Daten im Access Ribbon, oder über den Menüpunkt  "Datei" -> "Datei exportieren"  / "Datei" -> "Datei importieren"  im VBA-Editor. 

    Das Keyboardstate Klassenmodul hat das Attribut VB_PredeclaredId=True gesetzt. Dieses Attribut würdest du verlieren, wenn du einfach nur den im VBA-Editor sichtbaren Code kopierst.

    Dieses Beispiel ist in einer Microsoft Access 2003 MDB Date verfügbar. Das einfache Demo-Formular, das zeigt wie man die Klasse verwendet, ist ein Access-Formular, aber das Klassenmodul selbst, sollte in jeder beliebigen VBA-fähigen Anwendung ohne irgendwelche Änderungen direkt verwendbar sein.

    Update 2018-02-19:

    Über die Funktion KeyIsDown des Klassenmoduls kann jetzt geprüft werden, ob eine beliebige Taste (VBA.KeyCodeConstants) aktuell gehalten wird. - Dies ist nicht in dem Beispiel-Formular sichtbar.

    Ich stelle meine Arbeit an diesem Beispiel hier der Öffentlichkeit ohne irgendwelche Einschränkungen unter der CC0-Lizenz zur freien Verfügung.

    Keyboardstate Sample herunterladen



    Zurück zur Übersicht

    MS Office Automation - VBA-Module der Konstanten

    Microsoft Office Automation – Konstanten als VBA-Modul

    Wenn du in deiner VBA-Programmierung andere Office-Programme (z.B. Outlook, Word, Excel, PowerPoint) per Code automatisiert hast und Late Binding verwendest, solltest du die benötigten Enums bzw. Konstanten aus der jeweiligen Office-Objektbibliothek in deinem eigenen Projekt selbst erneut deklarieren. Wenn du die Konstanten verwendest, lässt sich wesentlich besser lesbarer Code schreiben, als wenn du die Konstanten direkt durch ihre jeweiligen Werte ersetzt.

    Die benötigten Enums, ihre Konstanten und deren Werte sind über den Objekt Browser der VBA-Umgebung sichtbar und können in die eigene Anwendung kopiert werden. Dies ist kein Hexenwerk, sondern nur reine Fleißarbeit.

    Solange du nur wenige Konstanten verwendest, ist das in wenigen Minuten erledigt. Bei einer umfangreichen Automationslösung wird das aber ziemlich mühsam und zeitraubend.

    Um dir diese Mühe zu sparen, habe ich die Enums der Microsoft Office 2013 Objektbibliotheken extrahiert und in VBA-Modulen zusammengefasst. Diese Module kannst du als Ganzes in dein VBA-Projekt importieren und hast sofort alle Konstanten der jeweiligen Bibliothek zur Verfügung.

    Microsoft Outlook

    Die Steuerung von Microsoft Outlook ist sicherlich ein naheliegender Anwendungsbereich für Automatisierung. Emails senden und empfangene Emails aus dem Posteingang in die Datenbank einzulesen wird in vielen Anwendungen benötigt. Auch die Synchronisierung von Kontakten, Terminen aus dem Kalender und Aufgaben ist durchaus nicht ungewöhnlich. Für all diese Zwecke wird die Outlook Objektbibliothek verwendet.

    Das Modul mit den Konstanten/Enums der Microsoft Outlook 15 Object Library (für Outlook 2013) kannst du hier herunterladen: modMSOutlook15_Enums

    Microsoft Word

    Access-Berichte decken bereits ein großes Spektrum an Anforderungen bei der Ausgabe von Daten auf einem Drucker oder als PDF ab. Dennoch gibt es darüber hinaus Fälle in denen explizit ein Word-Dokument erstellt werden muss oder in dem die Gestaltungsmöglichkeiten einen Access-Berichts zu limitiert sind. In diesen Fällen ist meistens eine Word Automatisierung über die Word-Objektbibliothek (im Gegensatz zu einem Word Seriendruck) das Mittel der Wahl.

    Das Modul mit den Konstanten/Enums der Microsoft Word 15 Object Library (für Word 2013) kannst du hier herunterladen: modMSWord15_Enums

    Microsoft Access

    Microsoft Access selbst ist nicht unbedingt ein naheliegender Kandidat für eine Automatisierung, egal ob mit oder ohne Late Binding. Allerdings schreibe ich im Moment häufiger VB-Scripte, die Access fernsteuern um gewissen Hilfsaufgaben bei der Entwicklung zu erledigten. Dafür ist es in der Tat hilfreich die Access Konstanten direkt verfügbar zu haben. VB-Script unterstützt allerdings nicht direkt die Enums des folgenden VBA-Moduls. Dafür kopiere ich mir die einzelnen Konstanten der Enums ohne den jeweiligen Enum/End-Enum-Teil.

    Das Modul mit den Konstanten für die Microsoft Access 15 Objektbibliothek (Access 2013) kannst du hier herunterladen: modMSAccess15_Enums

    Microsoft PowerPoint

    Ein anderer, nicht besonders naheliegender Kandidat für Automatisierung ist Microsoft PowerPoint. Ob du es glaubst, oder nicht, vor ein paar Jahren hat einer meiner Kunden tatsächlich die Anforderungen gehabt, eine PowerPoint Präsentation aus Access heraus zu automatisieren. Auch wenn dies sicherlich eher selten verwendet wird, kann es durchaus ein mächtiges Konzept sein, Daten aus einer Access Anwendung in visuell ansprechenden und einfach aufzunehmenden PowerPoint Folien darzustellen.

    Hier ist das VBA Modul mit allen Automatisierungskonstanten/Enums der Microsoft PowerPoint 15 (PowerPoint 2013) Objekt Bibliothek. modMSPowerpoint15_Enums

    Microsoft Office (Object Library)

    Alle Microsoft Office Anwendungen verwenden einige gemeinsame Klassen, Enums und Konstanten die in der Microsoft Office Objekt Bibliothek definiert sind. Die am häufigsten genutzten Objekte und Konstanten aus dieser Bibliothek sind mit Sicherheit diejenigen der CommandBar- und der Ribbon-Objekte (Streng genommen sind die letzteren eigentlich Interfaces.) Du kannst diese verwenden, um die Benutzeroberfläche von Microsoft Office Anwendungen zu erweitern.

    Hier ist das VBA Modul mit allen Automatisierungskonstanten/Enums der Microsoft Office 15 (Office 2013) Objekt Bibliothek: modMSOffice15_Enums

    Microsoft Excel

    Die naheliegendste Bibliothek aus der Microsoft Office Familie ist natürlich die Excel-Automation-Objekt-Bibliothek. Wenn du nur Daten im Excel-Dateiformat zum Datenaustausch mit anderen Anwendungen exportieren willst, brauchst du Excel nicht zu automatisieren. Allerdings habe ich Excel-Automation in zahllosen Projekten verwendet, wenn Daten für die weitere Analyse in Excel selbst exportiert werden sollten. In diesem Anwendungsfall wirst du wahrscheinlich noch einige hübsche Formatierungen und Anpassungen des Layouts in dem exportierten Excel-Arbeitsblatt vornehmen wollen. - Willkommen zur Excel-Automatisierung.

    Hier ist das VBA Modul mit allen Automatisierungskonstanten/Enums der Microsoft Excel 15 (Excel 2013) Objekt Bibliothek: modMSExcel15_Enums

    Andere Office Versionen

    Du kannst diese Module auch verwenden, wenn du eine frühere Version einer Microsoft Office Anwendung in deinem Projekt verwendest. Natürlich solltest du dann keine Konstanten in deiner Programmierung verwenden, die erst mit Office 2013 neu eingeführt wurden.

    Das gilt analog für Office 2016. Du kannst die Module verwenden, aber wenn du eine Konstante benötigst, die in Office 2016 neu hinzugefügt wurde, musst du diese selbst per Hand deklarieren/kopieren.

    Ich werde wahrscheinlich zukünftig auch entsprechende Module für Office 2016 bereitstellen.

    Andere Anwendungen

    Mit der Veröffentlichung des Modules der Konstanten für die Excel-Automatisierung sind die geplanten Module jetzt vollständig.

    Wenn du eine Idee hast für andere, häufig verwendete Bibliotheken, die auch für andere nützlich sein könnten, dann schreib mir doch eine Email mit deinem Vorschlag an phil@codekabinett.com und ich werde sehen, was ich tun kann.

    Auch wenn im Moment keine konkreten weiteren Module geplant sind, kannst du natürlich trotzdem gerne meinen Newsletter abonnieren, um bei eventuellen weiteren Veröffentlichungen informiert zu werden.



    Zurück zur Übersicht

    Datumsformat aus den Windows Regionseinstellungen auslesen - VBA/API Beispiel

    Dieses Beispiel ist ein VBA Codemodul. Es zeigt wie man verschiedene Aspekte der Windows API anwendet.

    • Wie man die EnumDateFormats Funktion verwendet, um das Datumsformat, das in den Windows Regions- und Sprachoptionen, für den aktuellen Benutzer oder als Systemvoreinstellung, eingestellt wurde, auslesen kann.
    • Wie man Anwendungsdefinierte Callback-Funktionen verwendet, die für manche Windows-API-Funktionen benötigt werden, schreibt bzw. verwendet.
    • Wie man einen String-Zeiger (LPTSTR) in einem VBA String konvertieren kann.
    • Wie man API-Deklarationen schreiben kann, die sowohl in der alten VBA 6.0 Version (Office 2000 bis 2007) als auch im neuen VBA 7.0 (Office 2010 und folgende) verwendet werden können, wobei diese API-Deklarationen sowohl 64bit als 32bit unterstützen.

    Um den Beispielcode auszuprobieren bzw. zu verwenden …

    1. Das ZIP-Archiv herunterladen.
    2. Die aus dem Archiv extrahierte Datei modWindowsDateFormat.bas in das VBA-Projekt einer Host-Anwendung (Access, Excel, Word, WasAuchImmer) importieren.
    3. Die Funktion GetDateFormat aufrufen, um das Datumsformat zu ermitteln.

    Dieses Modul wurde in Access 2010 32bit geschrieben und getestet. Es sollte aber in jeder Microsoft-Office-Anwendung mit VBA-Unterstützung (beginnend mit Office 2000) funktionieren und sowohl zur 32bit-Edition als auch zur 64bit-Edition kompatibel sein.

    Download: modWindowsDateFormat   (Hochgeladen: 2017-10-30)

    Du kannst dieses Modul in deinen eigenen Anwendungen frei verwenden. Eine Wiederveröffentlichung dieses Beispiels ohne signifikante, eigene Änderungen/Erweiterungen bedarf der ausdrücklichen, schriftlichen Genehmigung des Autors.



    Zurück zur Übersicht

    Suchfeld in der Navigationsleiste eines Access Formulars ausblenden

    In aktuellen Versionen von Microsoft Access befindet sich in der Navigationsleiste unten in den Access-Formularen eine TextBox zur Suche. Dies ist eine nette Funktion, wenn deine Anwendung ein Access-Backend verwendet und dein Formular relativ wenige Datensätze anzeigt. Bei ODBC-Datenbank-Backends oder einer großen Anzahl von Datensätzen in einem Formular kann die Benutzerfreundlichkeit dieser Funktion allerdings miserabel sein. Access beginnt automatisch mit der Suche, sobald du in der TextBox tippst. Bei einer großen ODBC-Tabelle aus einem Remote-Backend gibst du nur einen Buchstaben ein, und Access kann für eine lange Zeit (Minuten) einfrieren. In der Statusleiste wird „Suchen. Drücken Sie STRG + UNTERBR, um abzubrechen. “ - Netter Versuch; STRG + UNTERBR funktioniert hier nicht…

    In einigen Szenarien ist es daher sinnvoll, dieses Suchfeld zu deaktivieren, um damit deine Benutzer dazu zu bringen einen benutzerdefinierten Suchdialog zu verwenden, der effizienter in den Daten deiner Anwendung sucht. Leider kann man nur die Navigationsleiste des Formulars als Ganzes aktivieren oder deaktivieren. Eine Anpassung der Navigationsleiste ist nicht möglich.

    Wieder einmal ist die Windows-API die Rettung! Dieses Problem war eine nette kleine Herausforderung, um mit der Windows-API herumzuspielen, und so dieses Such-Steuerelement mit VBA-Code zu deaktivieren oder auszublenden. Ich habe eine Lösung gefunden, die das Suchfeld zuverlässig deaktiviert. In Access 2016 und neueren Versionen wird die Such-TextBox auch weitgehend ausgeblendet, nur der dünne Rand des Suchfelds bleibt übrig. Bei älteren Versionen wird anstelle des Suchfelds weiterhin ein graues deaktiviertes Feld angezeigt. – Du kannst das wahrscheinlich verbessern, wenn du, je nach aktuellem Farbschema, den richtigen Farbcode für den Hintergrund der Navigationsleiste ermittelst.

    Um das Suchfeld in der Navigationsleiste mit meiner Implementierung auszublenden, importiere mein Modul in dein VBA-Projekt und rufe dann HideNavigationBarSearchBox Me.Hwnd z.B. im Form_Load-Ereignis für das Formular auf, für das du das Suchfeld ausblenden möchtest.

    modHideSearchBox herunterladen (uploaded 2021-01-21)



    Zurück zur Übersicht

    CDO-Bibliothek-Konstanten - Download

    Die Collaboration Data Objects (CDO)-Bibliothek ist eine COM-Bibliothek, die seit Windows 2000 in Microsoft Windows enthalten ist, damit Softwareentwickler schnell E-Mail-Funktionalität in ihren Anwendungen und Skripten implementieren können.

    (Wenn Du mit der Verwendung der CDO nicht vertraut bist, lies meinen Text zum Senden von E-Mails mit VBA und CDO.)

    Obwohl die CDO-DLL-Bibliothek in Windows enthalten ist, wird sie dennoch häufig mit Late Binding verwendet. In diesem Fall kannst du die in der Bibliothek deklarierten Konstanten nicht direkt in deinem Code verwenden.

    Ich rate dringend davon ab, anstelle der benannten Konstanten nur die reinen Konstanten-Werte in deinem Code zu verwenden. Dies würde deinen Code viel schlechter lesbar machen. Ein besserer Ansatz ist, die ursprünglichen Konstanten in deinem eigenen Projekt (erneut) zu deklarieren. Um dies noch verlockender zu machen, habe ich alle Konstanten aus der CDO-Bibliothek (CDOSYS.dll) in ein fertiges VB-Modul (.bas-Datei) exportiert. Du kannst dieses Modul entweder in dein VBA-Projekt importieren oder einfach den Inhalt der Moduldatei kopieren und einfügen.

    Im herunterladbaren ZIP-Archiv stehen zwei verschiedene „Geschmacksrichtungen“ des Moduls zur Verfügung. Die erste, cdo_constants_public.bas, enthält alle Enumerationen und Konstanten als Public deklariert. Du fügen diese deinem Projekt hinzu und kannst dann alle Konstanten überall verwenden. Das ist einfach, da sich alle Konstanten im globalen Namespace befinden, aber es wird auch eine "Namespace-Pollution" verursachen, da dein Intellisense-Dropdown mit all diesen Konstantennamen überflutet wird.

    Ich persönlich würde eher die zweite, cdo_constants_private.bas, verwenden, die genau dieselben Konstanten enthält, aber alle als Private deklariert. Du kannst damit ein einzelnes Modul mit der CDO-Funktionalität erstellen und die Konstantendeklarationen in dieses Modul aufnehmen. Dadurch wird zwar dieses eine Modul ziemlich aufgebläht, aber das Aufblähen wirkt sich nicht auf andere Stellen deines Projekts aus.

    Download cdo_constants.zip (uploaded 2021-07-08)



    Zurück zur Übersicht

    Dateien Asynchron Kopieren mit der FileCopyEx-API-Funktion - 64Bit-kompatibel

    Die FileCopyEx-Funktion der Windows-API ist eine Funktion zum asynchronen Kopieren von Dateien. Sie führt den Kopiervorgang im Hintergrund aus und gibt dem Benutzer die Möglichkeit, den Vorgang abzubrechen, während er ausgeführt wird. Dies ist sehr nützlich, wenn der Benutzer große Dateien kopieren möchte (oder muss) und Du ihm die Möglichkeit geben möchtest, seine Meinung zu ändern, während der Kopiervorgang noch läuft, ohne warten zu müssen, bis er abgeschlossen ist.

    Ein interessanter Aspekt der Verwendung der FileCopyEx-Funktion besteht darin, dass sie eine Callback-Funktion in VBA verwendet, um die aufrufende Anwendung über den Fortschritt des Kopiervorgangs zu informieren und eine Option zum Abbrechen des Vorgangs bereitzustellen. – API-Callback-Funktionen ist ein Thema, auf das ich in Zukunft noch genauer eingehen werde.

    Ich wurde kürzlich von Peter Doering angesprochen, um bei der Anpassung seiner Implementierung der FileCopyEx-Funktion an 64bit zu helfen. Als Grundlage für die Codeanpassung stellte er eine kleine Access-Beispieldatei zur Verfügung, die die Funktionalität zeigt.

    Nachdem ich die 64-Bit-Anpassung abgeschlossen hatte, entschied ich mich, die Beispielanwendung mit meinen Modifikationen und einigen Verbesserungen zu veröffentlichen. Dieses Beispiel erfordert zur Ausführung VBA7 (Office 2010 und höher). Mit VBA7 läuft das Beispiel sowohl in 32Bit- als auch in 64Bit-Umgebungen.

    Der ursprüngliche VB-Code für die API wurde von Randy Birch veröffentlicht, der mir freundlicherweise die Erlaubnis erteilte, meine 64bit-Adaption hier zu veröffentlichen.

    AsyncFileCopyDemo herunterladen (hochgeladen 2021-10-29)

     



    Zurück zur Übersicht

    Abonniere meinen Newsletter

    *

    Ich werde Deine Email-Addresse niemals weitergeben. Du kannst den Newsletter jederzeit abbestellen.
    Die Emailliste wird bei Mailchimp in den USA gespeichert. Diese Auftragsverarbeitung ist vertraglich geregelt. Weitere Details in der Datenschutzerklärung.



    © 1999 - 2021 by Philipp Stiefel - Datenschutzerklärung