Von: access-weekly-html-request@smarttools.de im Auftrag von SmartTools Publishing [access-weekly-html-reply@smarttools.de]
Gesendet: Donnerstag, 4. August 2005 23:41
An: Access Weekly Abonnenten
Betreff: SmartTools Access Weekly vom 5.8.2005

Ausgabe vom 5. August 2005

 In dieser Ausgabe

Access-News & Downloads
Access-Tipp der Woche
Access-Helpline
Newsletter-Tipp
 Access-News & Downloads

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:

  • Urlaubs- und Personalplanung
  • Belegung von Wohnungen oder Häusern
  • Vermietung von Geräten
  • Fahrzeuge eine Fuhrparks
  • Raumbelegung
  • Projekt- und Ressourcenplanung
  • u.v.m.
Sie erhalten diese Lösung in einer komplett ungeschützten Entwicklerversion (MDB-Datei) ohne jegliche Einschränkungen an. Sie können den Belegungsplan in beliebig viele Datenbanken integrieren und auf unbegrenzt vielen Arbeitsplätzen installieren! Weitere Informationen finden Sie unter:

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: Datenbanken optimal pflegen

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.

 Access-Tipp der Woche

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:

  1. Öffnen Sie zunächst das Formular im Entwurfsmodus.
  2. Legen Sie eine neue Schaltfläche "btnSuchen" oder ähnlich im Kopf oder Fuß des Formulars an. Sie können entweder eine Bezeichnung wie "Suchen..." im Eigenschaftenfenster der Schaltfläche zuordnen oder über die Eigenschaft "Bild" ein Symbol anzeigen lassen.
  3. In der Eigenschaft "Beim Klicken" der Schaltfläche geben Sie nun "=ACWSuchen()" ein. Dadurch wird bei einem Klick auf die Schaltfläche die betreffende Funktion im globalen Modul aufgerufen und steuert dann den Suchvorgang.
Nach einem Klick auf die neu angelegte Schaltfläche wird die zentrale Funktion "ACWSuchen()" aufgerufen, die den weiteren Suchvorgang wie folgt steuert:

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

ANZEIGE 
Formatierte Memofelder für Ihre Datenbanken

Mit Total Access Memo können Sie endlich formatierten Text in Ihren Datenbanken anzeigen, bearbeiten und ausdrucken:

  • Sie erhalten ein neues Steuerelement, das Sie mit zwei Mausklicks in Formulare und Berichte einfügen können
  • Ihre Memofelder werden zu einer kleinen Textverarbeitung mit allen wichtigen Format-Funktionen. Sie können sogar eingebettete Objekte und Grafiken verwenden.
  • Sie können das neue Steuerelement beliebig oft mit beliebig vielen Datenbanken an andere Anwender weitergeben
Weitere Informationen finden Sie unter:

Total Access Memo für Access 2003, 2002/XP und 2000

Total Access Memo für Access 97


 Access-Helpline

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.

ANZEIGE 
Erweiterte Version des OLXDuplicateChecker findet ab sofort Duplikate in allen Ordnern

Der bewährte OLXDuplicateChecker kann jetzt noch mehr! Ab sofort finden und entfernen Sie nicht nur doppelte Adressen, sondern auch beliebige andere Duplikate aus anderen Ordnern in Outlook oder auf dem Exchange Server. Mit wenigen Mausklicks finden Sie:

  • doppelte E-Mail
  • doppelte Aufgaben
  • doppelte Termine
  • doppelte Journal-Einträge
  • und natürlich doppelte Adressen
Mit dem OLXDuplicateChecker können Sie all diese Duplikate innerhalb weniger Sekunden ausfindig machen und löschen.

Den OLXDuplicateChecker gibt es in einer Einzelplatzversion zum Löschen von Duplikaten aus Ihrer persönlichen Ordnerdatei (PST):

OLXDuplicateChecker - Einzelplatzversion

...und in einer Serverversion, wenn Sie Duplikate aus Ordnern auf dem Exchange-Server entfernen möchten:

OLXDuplicateChecker - Serverversion


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.

 Newsletter-Tipp

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.

  • Aktuelle Meldungen über neue Lösungen und Add-Ins für Office 2003, 2002/XP, 2000 und 97
  • Berichte über Updates und Bugfixes.
  • Tipps und effektivere Arbeitstechniken zu Access, Excel, Word & Co.
  • Kostenlose Downloads zu Office 2003, 2002/XP, 2000 und 97
  • Antworten auf Ihre Fragen zu Microsoft Office.
Und das beste am SmartTools Office Insider: Er ist vollkommen kostenlos!

Klicken Sie hier für Ihr kostenloses Abo!

 Abonnementverwaltung

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.

Copyright © 2005 SmartTools Publishing Thomas Tai
Luisenstrasse 52, 49565 Bramsche
Telefon: 05461/91052, Fax: 05461/2609
E-Mail: access-weekly@smarttools.de
Internet: http://www.smarttools.de/