Access-News & Downloads
Access-Helpline
Spotlight: Personal-, Belegungs- und Zeitpläne endlich grafisch darstellen Die perfekte Access-Erweiterung für Planungen aller Art: Sie geben in einer Tabelle lediglich Start- und Enddatum der einzelnen Vorgänge wie Belegungen, Vermietungen, Urlaub usw. ein und erhalten als Ergebnis ein übersichtliches Balkendiagramm. Mit wenig Aufwand integrieren Sie den Plan in Ihre eigenen Datenbanken, wobei eine Fülle von Anwendungen denkbar ist:
Belegungsplan 2.11 für Access Download-Tipp: Datenbanken optimal pflegen Kennen Sie den Punkt, den dem Sie feststellen, dass es um die Stabilität und Konsistenz der Datenbank anscheinend nicht zum Besten steht: Die Performance nimmt stetig ab, Zugriffe brauchen immer länger, Datensatzinhalte verändern sich anscheinend von selbst, Funktionen und Prozeduren werden nicht mehr gefunden. Schließlich meldet Access beim Öffnen von Objekten oder beim Laden der Datenbank, dass Beschädigungen vorliegen. In unserer kostenlosen Techinfo zeigen wir, dass die Schuld an diesen Problemen nur bedingt Access zuzuschreiben ist. Sie erfahren, wie Sie diese Probleme in Zukunft vermeiden und defekten Datenbanken effektiv vorbeugen können. Unter anderem geht es um die Automatisierung der Datenbankpflege:
Techinfo: SQL-Datenbanken mit Excel analysieren Der SQL Server stellt mit den Analyse-Tools Services zur Verfügung, über die sich per OLAP Datenbestände auswerten und analysieren und so bei erkennbaren Schwachstellen gegebenenfalls optimieren lassen. Ab Excel 2002 wurde eine spezielle Unterstützung dieser Analyse-Tools und OLAP integriert. Eine umfangreiche Techinfo, die den Einsatz von Excel für Analysen, Auswertungen und Statistiken ausführlich erläutert, finden Sie unter der folgenden Adresse: Techinfo: SQL-Datenbanken mit Excel analysieren Die Autoren beschreiben hier anhand praktischer Beispiele die Vorbereitungen, notwendige Einstellungen und den Zugriff per OLAP. Darüber hinaus widmen sie sich sehr ausführlich der Programmierung dieser Möglichkeiten per VBA. Nebenbei erfahren Sie hier eine Menge interessanter Details zu Pivot-Tabellen und Pivot-Charts sowie deren Objektmodelle und den verfügbaren Ereignisprozeduren für die Arbeit mit diesen Objekten.
Alternative Suchfunktion für Access, Teil 2 Versionen: Access 2003, 2002/XP, 2000 und 97 Nachdem wir im ersten Teil dieses Tipps der Woche die notwendigen Basisfunktionen eingerichtet haben, geht es nun um den Einbau der Suchfunktion in ein Formular und um die Erläuterung der Funktion "ACWSuchen()". Den Aufruf der Suchfunktion integrieren Sie wie folgt in ein Formular:
Function ACWSuchen() Dim Ctl As Control Dim strSuchenNach As String Dim strFeldname As String Dim strTitel As String Dim strPrompt As String Dim intTaste As Integer On Error Resume Next Set Ctl = Screen.PreviousControl Das "Screen"-Objekt stellt über seine Eigenschaft "PreviousControl" eine Referenz auf das zu vorletzte aktivierte Steuerelement zur Verfügung - dieses Steuerelement ist das Feld, in das der Anwender den Cursor gesetzt hat, bevor er auf die Schaltfläche Suchen klickte. Ctl.SetFocus strFeldname = Ctl.Name Über diese Referenz können wir das Feld aktivieren und dessen Namen in Erfahrung bringen. Die Aktivierung ist notwendig, da die im Folgenden eingesetzte Funktion "DoCmd.FindRecord" im aktuellen Feld suchen soll. strTitel = "Suchen in Feld »" & strFeldname & "«:" NeueSuche: strPrompt = "Suchbegriff eingeben " & - "(Teilbegriff möglich, GROSS/klein spielt " & _ "keine Rolle):" strSuchenNach = InputBox$(strPrompt, strTitel, "") If strSuchenNach = "" Then Exit Function Zunächst zeigen wir allerdings erst einmal eine InputBox an, damit der Anwender den Suchbegriff eingeben kann. Klickt er dabei auf Abbrechen, wird eine leere Zeichenkette als Ergebnis geliefert und wir verlassen die Funktion. DoCmd.FindRecord strSuchenNach, _ acAnywhere, _ False, _ acSearchAll, _ False, _ acCurrent, _ True Hier rufen wir nun "FindRecord" auf, das nach dem eingegebenen Suchbegriff sucht. Die folgenden Einstellungen werden vorgegeben: acAnywhere: Teil des Feldinhaltes vergleichen False: GROSS/klein spielt keine Rolle acSearchAll: Alle Datensätze ab Anfang durchsuchen False: Formatierung spielt keine Rolle acCurrent: Aktuelles Feld durchsuchen True: Im ersten Datensatz beginnen If InStr(Ctl, strSuchenNach) = 0 Then 'Nichts gefunden Beep strPrompt = "Keinen Eintrag für Suchbegriff '" + _ strSuchenNach + "' in Feld '" + _ strFeldname + "' gefunden!" + _ vbCrLf + vbCrLf strPrompt = strPrompt + "Neuen Suchbegriff eingeben?" intTaste = MsgBox(strPrompt, vbYesNo + _ vbExclamation, strTitel) If intTaste = vbYes Then GoTo NeueSuche Exit Function End If In diesen Zeilen prüfen wir, ob ein passender Datensatz gefunden wurde - wenn nicht, wird ein entsprechender Hinweis und eine Abfrage anzeigt, ob erneut gesucht werden soll. Weitersuchen: DoEvents Beep intTaste = MsgBox("Weitersuchen?", _ vbYesNo + vbQuestion, _ strTitel) If intTaste <> vbYes Then Exit Function Im letzten Bereich der Funktion fragen wir, ob weitergesucht werden soll oder nicht. Je nach Antwort des Anwenders verlassen wir die Routine oder machen mit den folgenden Anweisungen weiter, um den nächsten passenden Datensatz zu suchen. 'Auf den nächsten Datensatz setzen, _ 'ab dem gesucht werden soll DoCmd.GoToRecord acActiveDataObject, , acNext DoCmd.FindRecord strSuchenNach, _ acAnywhere, _ False, _ acDown, _ False, _ acCurrent, _ False DoEvents If InStr(Ctl, strSuchenNach) <> 0 Then 'Gefunden, weitersuchen? GoTo Weitersuchen Else 'Nichts weiter gefunden, zurück zum vorherigen Satz DoCmd.GoToRecord acActiveDataObject, , acPrevious End If End Function Hier prüfen wir wieder, ob ein passender Datensatz gefunden wurde. Ist das der Fall, springen wir zum Label "Weitersuchen", um erneut den Anwender zu fragen, ob weitergesucht werden soll. Wurde kein passender Datensatz gefunden, gehen wir einen Datensatz zurück und zeigen so den zuletzt gefundenen Datensatz erneut an. Wie erwähnt, erfolgt die Suche mit fest vorgegebenen Einstellungen, die wir über entsprechende Parameter bei "DoCmd.FindRecord" angeben: DoCmd.FindRecord strSuchenNach, _ (2)acAnywhere, _ (3)False, _ (4)acSearchAll, _ (5)False, _ (6)acCurrent, _ (7)True Im folgenden eine Übersicht anderer möglicher Einstellungen und deren Bedeutung: 2: acAnywhere, acEntire, acStart Suchbegriff kann irgendwo im Feld vorkommen, muss mit Feldinhalt oder mit dem Anfang des Feldinhaltes übereinstimmen 3: False bzw. True Groß- und Kleinschreibung spielt keine Rolle bzw. wird berücksichtigt 4: acSearchAll, acDown, acUp Alle Datensätze ab Anfang, Datensätze ab aktuellem Datensatz nach unten oder Datensätze ab aktuellem Datensatz nach oben durchsuchen. 5: False bzw. True Formatierung spielt keine Rolle bzw. wird berücksichtigt 6: acCurrent, acAll Nur aktuelles Feld durchsuchen, Alle Felder durchsuchen 7: True bzw. False Im ersten Datensatz beginnen oder ab dem aktuellen Datensatz suchen
Haben Sie Fragen zu Access 2003, 2002/XP, 2000 und 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 Fragen aus und beantwortet Sie an dieser Stelle im Newsletter. Outlook aus Access starten Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich suche eine Lösung, mit der ich Outlook aus Access starten kann und zwar unabhängig davon, wo Outlook installiert ist. Der Start per "Shell()" funktioniert ja nur dann, wenn das Outlook-Verzeichnis irgendwo im Suchpfad per "Set Path=..." aufgenommen wurde, aber das ist nur selten der Fall. Diverse Anfragen ANTWORT: In diesem Fall hilft, wie so oft, eine API-Funktion: "ShellExecute()" führt analog zu "Shell()" externe Programme aus. Die Besonderheit dieser API-Funktion ist, dass sie bei fehlendem Pfad auch ohne "Set Path=..." arbeitet, weil sie die benötigten Informationen aus der Registry ausliest. Dort hält Windows bei jeder Installation einer Anwendung im Bereich "HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ App Paths" fest, in welchem Verzeichnis die dazugehörige EXE-Datei gespeichert ist. Der Eintrag "outlook.exe" verrät dann, dass zum Beispiel Office 2000 in "D:\Off2000\Office\" installiert und "outlook.exe" somit dort zu finden ist. Geben Sie in einem neuen oder einem vorhandenen Modul die folgende Deklaration und die Funktion "RunOutlook()" ein: Public Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Function RunOutlook() On Error Resume Next ShellExecute 0&, vbNullString, "outlook.exe", _ vbNullString, vbNullString, vbNormalFocus End Function Den Aufruf können Sie beispielsweise über eine Schaltfläche vornehmen, indem Sie für die Eigenschaft "Beim Klicken" den Ausdruck "=RunOutlook()" eingeben.
Kalenderwoche per 'Format()' ermitteln Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich verwende in einer Terminverwaltung ein Textfeld mit dem folgenden Ausdruck in "Steuerelementeinhalt": =Format(Jetzt(); "ww") Das Feld soll einfach nur die aktuelle Kalenderwoche anzeigen, aber es funktioniert nicht: In den meisten Fällen ist die angezeigte Kalenderwoche der tatsächlichen Kalenderwoche ein oder zwei Wochen voraus. Können Sie mir einen Tipp geben, was ich falsch mache? U. Fuhlendorff ANTWORT: In Deutschland gelten für die Berechnung der Kalenderwoche andere Regeln als in den USA. Sie müssen noch zwei weitere Parameter angeben, um den ersten Tag der Woche (hier "Montag", VBA: "vbMonday", Wert= 2) festzulegen und um zu entscheiden, welche Woche als erste Kalenderwoche (hier "mit mindestens vier Tagen", VBA: "vbFirstFourDays", Wert= 2) gilt: =Format(Jetzt(); "ww"; 2; 2) Aufgrund eines Bugs in der "Format()"-Funktion bzw. in der für Datumsberechnungen zuständigen OLEAUT32.DLL werden jedoch die ersten und letzten Kalenderwochen eines Jahres teilweise falsch berechnet. Microsoft empfiehlt deshalb für die Berechnung von Kalenderwochen den Einsatz einer benutzerdefinierten Funktion anstelle von "Format()": Microsoft Artikel Geben Sie die dort erläuterte Funktion "WOY()" (Week Of Year) in ein beliebiges Modul ein: Function WOY(MyDate As Date) As Integer WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If WOY > 52 Then If Format(MyDate + 7, "ww", _ vbMonday, vbFirstFourDays) = 2 Then WOY = 1 End If End Function Ändern Sie dann für Ihr Textfeld den Ausdruck in "Steuerelementeinhalt" auf "=WOY(Jetzt())". Frage zum 'SmartTools Link-Lister' Versionen: Access 2003, 2002/XP, 2000 und 97 FRAGE: Ich habe mir Ihr kostenloses Tool "SmartTools Link-Lister" (http://www.add-in-world.com/katalog/ac-linklister) zum Anzeigen aller verknüpften Tabellen heruntergeladen und in meine Datenbank eingebaut. Allerdings musste ich feststellen, dass hier neben den Tabellen auch einige Abfragen aufgelistet werden. Wie kann das sein? M. Proissl ANTWORT: Das wüssten wir auch gerne ;) Wir lesen definitiv nur die TableDefs-Auflistung aus - warum und unter welchen Umständen Access QueryDefs im TableDef-Format ablegt, konnten wir bislang nicht herausfinden. Wir analysieren Zurzeit verschiedene Datenbanken, bei denen das Problem auftritt. Sobald eine überarbeitete Version verfügbar ist, werden wir in Access Weekly darüber informieren.
Office-Tipps kostenlos per E-Mail Der SmartTools Office Insider ist Ihr monatlicher News-Service für Microsoft Office. Hier finden Sie aktuelle Informationen zu Access, Excel, Word & Co, eine Fülle von Download-Links sowie detaillierte Tipps zu neuen Patches und Updates. So verpassen Sie nichts, was Sie unbedingt zu Microsoft Office wissen müssen.
Klicken Sie hier für Ihr kostenloses Abo!
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.
|