Access-News & Downloads
Access-Helpline
Spotlight: Komfortable Urlaubsverwaltung mit Access Mit dieser Datenbank haben Sie die Fehlzeiten in Ihrer Firma oder Abteilung optimal im Griff: Urlaub, Krankheit, Sonderurlaub und sonstige Abwesenheiten lassen sich für jeden Mitarbeiter komfortabel mit wenigen Mausklicks erfassen. Wenn Sie mit dem einen oder anderen Detail nicht zufrieden sind, ändern Sie es einfach ab, denn Sie erhalten die Datenbank ungeschützt mit dem kompletten Sourcecode! Die aktuelle Version 2.11 der beliebten Urlaubsdatenbank bietet unter anderem:
Urlaubs-Datenbank für Access Download-Tipp: Formular-Positionen sichern und abrufen Formulare öffnet Access entweder immer zentriert oder an der letzten, im Entwurfsmodus mehr oder weniger zufällig gewählten Position. Oftmals sollen die Formulare einer Datenbank aber beim Starten genauso positioniert werden, wie sie beim Verlassen der Datenbank angeordnet waren. Gleiches gilt für die Größe: Auch hier wäre es extrem arbeitssparend, wenn einmal eingestellte Formulargrößen wiederhergestellt werden könnten. Mit unserer kostenlosen VBA-Bibliothek stellen wir Ihnen eine Lösung zur Verfügung, mit der Sie eine solche Funktion universell in beliebige Datenbanken einbinden und nach geringen Anpassungen mit all Ihren Formularen verwenden können:
News: Ereignis- und Fehlermeldungen entschlüsseln Bei der Arbeit mit Access oder der Entwicklung von VBA-Lösungen werden Ihnen oftmals nur lapidare Fehlermeldungen mit mehrstelligen Fehlernummern angezeigt, die wenig Auskunft über die Ursache des Problems Auskunft geschweige denn Hinweise zur Lösung geben. Ähnlich verhält es mit vielen Einträgen in der Ereignisanzeige von Windows. Auf einer speziellen Website bietet Microsoft nun die Möglichkeit, gezielt weitere Informationen über eine Fehler- oder Ereignisnummer Details abrufen zu können: Ereignis- und Fehlermeldungen entschlüsseln
Symbole und Schaltflächen mit mehreren Funktionen belegen Versionen: Access 2003, 2002/XP, 2000 und 97 Platz in den Symbolleisten von Access kann man erfahrungsgemäß nie genug haben. Die "Mehrfachbelegung" von Symbolen bietet daher eine interessante und Platz sparende Alternative: Über ein Symbol können themenverwandte Funktionen oder Makros abgerufen werden, wobei eine eventuell gedrückte Sondertaste wie Umschalt oder Strg bestimmt, welche Funktion ausgeführt werden soll. Beispiel: In Formularen verwenden Sie regelmäßig formular- oder Auswahlbasierte Filter sowie Spezialfilter für komplexere Kriterien. Access hat dazu bereits zwei Symbole sowie einen "Ein-/Aus-Schalter" in der Symbolleiste "Formular" vorgesehen. Diese Funktionen können Sie auf ein Symbol reduzieren, über das die Filter mit gedrückten Sondertasten wie folgt gesteuert werden: Normal-Klick: Formularbasierter Filter Umschalt-Klick: Auswahlbasierter Filter Strg-Klick: Spezialfilter Umschalt+Strg-Klick: Filter Ein/Aus Für die Erkennung einer gedrückten Sondertaste können Sie in VBA-Routinen eine API-Funktion nutzen: "GetKeyState(<WelcheTaste>)" gibt Auskunft darüber, ob eine bestimmte Taste, deren Index Sie als Parameter übergeben, gerade gedrückt ist oder nicht. Für die Sondertasten Umschalt und Strg verwenden Sie "16" oder "17" als Index, so dass eine Abfrage wie folgt aussieht: 'Umschalt+Strg? If Abs(GetKeyState(16) < 0) And _ Abs(GetKeyState(17) < 0) Then 'Funktion 1 'Umschalt? ElseIf Abs(GetKeyState(16) < 0) Then 'Funktion 2 'Strg? ElseIf Abs(GetKeyState(17) < 0) Then 'Funktion 3 Keine Sondertaste gedrückt... Else 'Funktion 4 End If Wie Sie sehen, können insgesamt vier Fälle unterschieden werden: Beide Sondertasten, nur die eine Sondertaste, nur die andere Sondertaste oder gar keine Sondertaste gedrückt. Die Alt-Taste können Sie übrigens nicht abfragen, da Office-Anwendungen bei einem Klick auf ein Symbol mit gedrückter Alt-Taste automatisch in den Modus "Symbolleiste anpassen" wechseln, um ein Verschieben/Kopiere des betreffenden Symbols zu vereinfachen. Am eingangs erwähnten "Filter"-Beispiel möchten wir Ihnen im Folgenden zeigen, wie eine Mehrfachbelegung eingesetzt werden kann:
(ByVal nVirtKey As Long) As Integer Diese Anweisung bietet Ihnen die Möglichkeit, die API-Funktion wie eine "interne" VBA-Funktion einzusetzen.
'Umschalt+Strg? If Abs(GetKeyState(16) < 0) And _ Abs(GetKeyState(17) < 0) Then DoCmd.RunCommand acCmdToggleFilter 'Umschalt? ElseIf Abs(GetKeyState(16) < 0) Then DoCmd.RunCommand acCmdFilterBySelection 'Strg? ElseIf Abs(GetKeyState(17) < 0) Then DoCmd.RunCommand acCmdAdvancedFilterSort 'Keine Sondertaste gedrückt... Else DoCmd.RunCommand acCmdFilterByForm End If End Function Diese Funktion prüft beim Aufruf die Sondertasten: Sind Umschalt+Strg gedrückt, wird der aktuelle Filterstatus umgeschaltet. Bei gedrückter Umschalt-Taste setzen wir den Auswahlbasierten Filter, bei gedrückter Strg-Taste den Spezialfilter und bei einem Klick ohne Sondertaste den Formularbasierte Filter.
Dieselbe Technik können Sie natürlich nicht nur für Symbole, sondern auch für Schaltflächen in Formularen einsetzen. Tatsächlich handelt es sich ja nicht um eine echte Mehrfachbelegung, sondern um eine Prozedur, die beim Aufruf prüft, welche Sondertaste zurzeit gedrückt ist. Dementsprechend könnten Sie derartige Prozeduren auch Schaltflächen zuweisen und damit mehrere Funktionen Platz sparend in Formulare integrieren.
Haben Sie Fragen zu Access 2003, 2002/XP, 2000 oder 97? Dann wenden Sie sich mit einer genauen Problembeschreibung (bitte keine Datenbanken schicken!) an: access-helpline@smarttools.de Unser Redaktionsteam wählt in jeder Ausgabe eine oder mehrere Fragen aus und beantwortet Sie an dieser Stelle im Newsletter. DoCmd.Hourglass-Problem lösen Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich habe ein Problem mit der Sanduhr. Ich arbeite mit einem Access-Projekt (.adp) das zu einer SQL-Datenbank verbunden ist. In einem Formular löse ich per Schaltfläche über das Ereignis "Beim Klicken" eine Ereignisprozedur aus. In der Prozedur werden dann per cmd.Execute "Gespeicherte Prozeduren" ausgeführt. Da sich dieser Befehl in einer Schleife befindet, kann die Ausführung je nach dem ziemlich lange dauern. Darum möchte ich während der Ausführung die Sanduhr einblenden. Die Anweisung "DoCmd.Hourglass True" funktioniert aber in diesem Fall nicht. Interessant ist, dass es im Entwurfsmodus (schrittweise Ausführung) funktioniert. Können Sie mir weiterhelfen? F. Renier ANTWORT: Zunächst eine generelle Anmerkung: Werden "DoCmd.Hourglass True" oder "DoCmd.Hourglass False" eingesetzt, muss die nächste Anweisung ein "DoEvents" sein, damit Access bzw. das System die Gelegenheit haben, den Mauszeiger umzustellen und die Anzeige zu aktualisieren. Es kann dann aber trotzdem noch passieren, dass der Mauszeiger wieder als normaler Pfeil erscheint: Der Mauszeiger wird vom System im Kontext eines Fensters verwaltet und nur innerhalb des jeweiligen Fensters als Sanduhr angezeigt. Andernfalls würde der Mauszeiger bei einer Verschiebung vor das Fenster einer anderen Anwendung ebenfalls als Sanduhr angezeigt werden und somit einen falschen Status widerspiegeln - die andere Anwendung befindet sich ja nicht in einem "Warten"-Modus. Darüber hinaus ist es möglich, den Mauszeiger systemweit zu setzen oder zurückzusetzen - dies könnte durchaus im Rahmen der Ausführung von "cmd.Excecute" passieren. Sie können versuchen, hier "dazwischenzufunken", indem Sie den Mauszeiger per API-Calls global setzen. Geben Sie dazu in einem neuen oder einem vorhandenen Modul die folgenden Deklarationen ein: Public prevCursor As Long Public myCursor As Long Public Const IDC_HOURGLASS = 32514& Public Declare Function LoadCursor Lib "user32" _ Alias "LoadCursorA" _ (ByVal hInstance As Long, _ ByVal lpCursorName As Any) As Long Public Declare Function SetCursor Lib "user32" _ (ByVal hCursor As Long) As Long Fügen Sie dann am Anfang Ihrer Ereignisprozedur folgende Anweisung ein: myCursor = LoadCursor(0, IDC_HOURGLASS) prevCursor = SetCursor(myCursor) Diese Anweisungen speichern den aktuellen Mauszeiger und setzen die Sanduhr als neuen Mauszeiger. Am Ende der Ereignisprozedur geben Sie folgende Anweisung ein: SetCursor prevCursor Dadurch wird der Mauszeiger wieder auf den vorherigen Zustand zurückgesetzt. Steuerung externer Programme für Access 2003 Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich habe Ihr kostenloses Tool "VBA-Bibliothek: Externe Programme" heruntergeladen und mit Access 2002 im Einsatz. Können Sie mir bitte mitteilen ob "ExecProg für Access 2002" auch unter Access 2003 läuft oder ob es dafür ein eine spezielle Lösung gibt? Diverse Anfragen ANTWORT: Sie können die Funktionen dieser VBA-Bibliothek unverändert auch in Access 2003 verwenden, es werden keine versionsspezifischen Features oder ähnliches genutzt. Für alle, die den Download noch nicht kennen: Sie finden die kostenlose Lösung samt ausführlicher Dokumentation unter VBA-Bibliothek: Externe Programme
Nachtrag: Anzeigen von Webseiten in einem Formular Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich habe Ihren Beitrag zum Anzeigen von Webseiten in einem Formular ausprobiert. Die Anzeige der ersten Website mit der Schaltfläche "Seite laden" funktioniert. Sobald ich jedoch eine der beiden Schaltflächen "Zurück" oder "Vorwärts" anklicke, wird folgender Fehler angezeigt: [...] W. Burtscher ANTWORT: Da Sie noch keine andere Seite ausgehend von der ersten Seite besucht haben, kann auch nicht zu irgendeiner Seite zurückgegangen und folglich auch zu keiner anderen Seite vorgegangen werden. Setzen Sie ein "On Error Resume Next" vor die Anweisungen der Ereignisprozeduren dieser Schaltflächen, dann werden bei einem irrtümlichen Anklicken keine Fehlermeldungen angezeigt: Private Sub_btnBack_Click On Error Resume Next Me.WebCtrl.GoBack End Sub Private Sub_btnForward_Click On Error Resume Next Me.WebCtrl.GoForward End Sub
Outlook-Tipps kostenlos per E-Mail SmartTools Outlook Weekly bietet jede Woche Tipps, aktuelle Infos und Download-Links für Outlook 2003, 2002/XP, 2000 und 97/98:
Um SmartTools Access Weekly abzubestellen, senden Sie einfach das Kommando "unsubscribe" an die Adresse access-weekly-html-request@smarttools.de Bitte beachten Sie, daß das Kommando im Nachrichtentext stehen muß (nicht im Betreff) und Sie keine Mail im HTML-Format senden dürfen. Weitere Informationen zur Verwaltung der Liste erhalten Sie mit dem Kommando "help" an dieselbe Adresse.
|