Von: access-weekly-html-request@smarttools.de im Auftrag von SmartTools Publishing [access-weekly-html-reply@smarttools.de]
Gesendet: Donnerstag, 9. Februar 2006 23:16
An: Access Weekly Abonnenten
Betreff: SmartTools Access Weekly vom 10.2.2006

Ausgabe vom 10. Februar 2006

 In dieser Ausgabe

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

Spotlight: Mustertexte und Textbausteine für Ihre Word-Dokumente und Outlook-Mails

Noch nie war es so einfach E-Mails, Briefe, Berichte, Angebote und beliebige andere Dokumente mit wenigen Mausklicks zu erstellen: Mit der brandneuen Version 2.0 von SmartTools QuickText Pro können Sie auf immer wieder benötigte Musterbriefe, Vorlagen und Textbausteine jetzt noch schneller und flexibler zugreifen.

SmartTools QuickText Pro wird voll automatisch in Word integriert und steht Ihnen daher auch zum schnellen Verfassen Ihrer Outlook-Mails zur Verfügung, wenn Sie Word als E-Mail-Editor eingestellt haben.

Das genial einfache und innovative Konzept hat sich bereits bei vielen tausend Anwendern in der Praxis bewährt:

  • Jeder Mustertext ist ein eigenes Dokument mit allen Formatierungen, Grafiken und Tabellen, die Word zu bieten hat. Öffnen, ändern, speichern - einfacher kann die Bearbeitung von Textbausteinen auch für unerfahrene Anwender nicht sein.
  • Sie haben auch größere Mengen von Mustertexten perfekt im Griff, denn Sie legen die Dateien einfach in verschiedenen Unterverzeichnissen ab, die SmartTools QuickText Pro Ihnen dann voll automatisch als Kategorien im Menü anbietet (auch über mehrere Ebenen!).
  • Sie müssen kein neues Programm erlernen, denn SmartTools QuickText Pro ist fest in die Menüs von Word integriert und lässt sich kinderleicht bedienen.
  • Nutzen Sie Ihre Mustertexte ganz einfach über das Netzwerk auch mit mehreren Anwendern. Alle Dokumente werden an einer Stelle zentral abgelegt, so dass Sie einen Mustertext nur ein einziges Mal erstellen und bearbeiten müssen.
Nutzen Sie unseren Aktionspreis für Access Weekly-Abonnenten mit zurzeit über 25% Rabatt:

http://www.add-in-world.com/katalog/quicktext-pro/

Download-Tipp: Komfortable Textbausteinverwaltung für Ihre Formulare

Wenn Sie bei der Datenerfassung in Access bestimmte Textpassagen immer wieder eingeben, bleibt Ihnen standardmäßig nur die AutoKorrektur-Funktion, um ein kleines Textbaustein-System aufbauen. Die Verwaltung ist allerdings wenig komfortabel und zudem auf einige Hundert Zeichen beschränkt.

Mit der kostenlosen Access-Erweiterung SmartTools Textbausteine für Memofelder können Sie beliebig viele Abkürzungen und dazugehörige Textbausteine mit bis zu 32.000 Zeichen pro Textbaustein komfortabel verwalten. Die Anbindung in Ihren Formularen erfolgt mit wenig Aufwand über eine kleine Ereignisprozedur. Anschließend können Sie in Memofeldern zum Beispiel Abkürzungen wie "rg" und danach ein Leerzeichen, ein Satzendezeichen (Punkt, Fragezeichen etc.) oder einfach Return eingeben. Die Abkürzung wird daraufhin automatisch durch den zugehörigen Textbaustein, also beispielsweise eine detaillierte Produktinformation, ersetzt. Alle Formulare und Module sind ungeschützt, so dass Sie die Lösung bei Bedarf problemlos an Ihre eigenen Anforderungen anpassen können:

http://www.add-in-world.com/katalog/actxtbausteine/

Techinfo: Aufgabenbereich 'Objektabhängigkeiten' effektiv nutzen

Der Aufgabenbereich "Objektabhängigkeiten" von Access 2003 gibt Auskunft darüber, in welcher Beziehung die einzelnen Komponenten einer Datenbank zueinander stehen. In diesem Arbeitsbereich werden Ihnen alle Beziehungen zwischen Formularen, Tabellen, Abfragen und anderen Objekten der Datenbank übersichtlich angezeigt. Damit haben Sie nun beispielsweise die Möglichkeit, Datenbanken zu aktualisieren oder darin enthaltene Fehler zu beheben, ohne sich erst mühsam in die Datenbankstruktur einarbeiten zu müssen. Den Umgang mit und die Möglichkeiten des neuen Aufgabenbereiches im Einzelnen zeigt eine Präsentation, die Sie unter der folgenden Adresse abrufen können:

Aufgabenbereich 'Objektabhängigkeiten' effektiv nutzen

Waren die News & Downloads hilfreich für Sie?

 Access-Tipp der Woche

Suchfunktion für alle Felder in einem Formular
Versionen: Access 2003, 2002/XP, 2000 und 97

Häufig müssen Sie in einem Formular nach einem oder mehreren Datensätzen suchen, von denen Sie lediglich wissen, dass bestimmte Begriffe in irgendeinem Feld vorkommen können. Sie können dazu zwar die Suchfunktion von Access verwenden, aber dazu müssen Sie aber erst einmal den entsprechenden Dialog aufrufen, konfigurieren und anschließend Datensatz für Datensatz durch die Fundstellen blättern.

Die Lösung aus diesem Tipp der Woche erlaubt die Eingabe eines Suchbegriffes direkt im Formular und setzt den Filter des Formulars auf alle Datensätze, in denen der Suchbegriff in einem der Text- oder Memofelder vorkommt. Diese Datensätze können Sie dann der Reihe nach durchblättern und bearbeiten. Die Eingabe eines Sternchens "*" als Suchbegriff schaltet den Filter wieder aus:

  • Legen Sie ein neues Modul an und geben Sie die folgende Funktion ein:
Function SearchAllFieldsFilter(strTable As String, _
                               strSearch As String) _
                               As String
  Dim rs As Recordset, intCnt As Integer
  Dim strFilter As String, I As Integer

  intCnt = 0
  Set rs = CurrentDb.OpenRecordset(strTable)
  rs.MoveFirst
  With rs
    For I = 0 To .Fields.Count - 1
      If .Fields(I).Type = dbText Or _
         .Fields(I).Type = dbMemo Then
        intCnt = intCnt + 1
        strFilter = strFilter & _
                   "[" & .Fields(I).Name & "] like '*" & _
                   strSearch & "*' or "
      End If
    Next I
  End With
  rs.Close
  If intCnt > 0 Then
    'letztes " or " wieder raus
    strFilter = Left$(strFilter, Len(strFilter) - 4)
    SearchAllFieldsFilter = strFilter
  Else
    SearchAllFieldsFilter = ""
  End If

End Function

  • Speichern Sie das Modul und verlassen Sie den VBA-Editor.
Basis der Lösung ist die Funktion "SearchAllFieldsFilter()", die als Parameter den Namen der zu durchsuchenden Tabelle und den Suchbegriff erwartet. Die angegebene Tabelle wird als Recordset geöffnet und auf den ersten Datensatz positioniert. Auf diesem Weg können wir nun auf die "Fields"-Auflistung des Datensatzes zugreifen, die wir wiederum in einer Schleife durchlaufen und zunächst auf den Datentyp prüfen. Handelt sich um ein Text- oder Memofeld nehmen wir es in ein Filter-Statement der folgenden Form auf:

[Feldname] like '*Such*' or [Feldname] like '*Such*' or..."

Das Ergebnis sieht dann zum Beispiel so aus:

[Kunden-Code] like '*assistent*' or [Firma] like
'*assistent*' or [Kontaktperson] like '*assistent*'
or [Position] like '*assistent*' or [Straße] like
'*assistent*' or [Ort] like '*assistent*' or [Region]
like '*assistent*' or [PLZ] like '*assistent*' or
[Land] like '*assistent*' or [Telefon] like
'*assistent*' or [Telefax] like '*assistent*'

Am Ende erscheinen in dem Formular also nur noch die Datensätze, in denen der Suchbegriff in irgendeinem Text- oder Memofeld an einer beliebigen Stelle vorkommt.

Zum Einsatz der Funktion in einem Formular gehen Sie folgendermaßen vor:

  1. Öffnen Sie das gewünschte Formular im Entwurfsmodus.
  2. Legen Sie im Formularkopf oder Formularfuß ein Textfeld "txtSearch" und setzen Sie die Eigenschaft "Nach Aktualisierung" auf "[Ereignisprozedur]".
  3. Klicken Sie auf die Schaltfläche mit den drei Punkten und geben Sie im VBA-Editor die folgenden Anweisungen ein:
Private Sub txtSearch_AfterUpdate()
  Dim strSearch As String, strFilter As String

  strSearch = Me.txtSearch
  If strSearch = "*" Then
    Me.Filter = ""
    Me.FilterOn = False
    Exit Sub
  End If

  strFilter = SearchAllFieldsFilter("Kunden", _
  Me.txtSearch)
  If strFilter <> "" Then
    Me.Filter = strFilter
    Me.FilterOn = True
  End If

End Sub

Ersetzen Sie dabei "Kunden" durch den Namen der Tabelle, die Ihrem Formular zugrunde liegt. Diese Anweisungen prüfen zunächst die Eingabe: Handelt es sich um ein Sternchen "*", wird der Filter zurückgesetzt und die Routine verlassen. Das Formular zeigt dann wieder alle Datensätze an. Andernfalls rufen wir "SearchAllFieldsFilter()" mit dem Namen der Tabelle und dem Suchbegriff auf. Das Ergebnis ist ein Kriterium, das wir direkt der "Filter"-Eigenschaft des Formulars zuordnen und anschließend aktivieren können.

Nachdem Sie diese Änderungen gespeichert und den Entwurfsmodus verlassen haben, können Sie das Formular einem ersten Test unterziehen: geben Sie einen Suchbegriff ein, von dem Sie wissen, dass er in einem Text- oder Memofeld vorkommt. Der Filter für das Formular wird entsprechend gesetzt und es erscheinen nur noch die passenden Datensätze.

War dieser Tipp für Sie hilfreich? Klicken Sie bitte hier!

ANZEIGE 
Das komfortable Verwaltungstool für Multiuser-Datenbanken

Hier ist das Tool, auf das alle Datenbank-Administratoren gewartet haben: Total Access Admin macht die Verwaltung von Multiuser-Datenbanken zum Kinderspiel. Unabhängig davon, ob Access 2003, 2002/XP, 2000 und 97 im Einsatz ist oder alle Versionen parallel genutzt werden - Sie haben die Kontrolle darüber, was mit der Datenbank geschieht:

  • Aktive Anwender anzeigen
  • Verhindern Sie neue Verbindungen zu der Datenbank
  • Inaktive User automatisch abmelden
  • Verdächtige oder abgebrochene Verbindungen finden
  • Mitteilungen an alle angemeldeten Anwender
  • Komfortabler und kostengünstiger Einsatz
Total Access Admin ist das unentbehrliche Tool, wenn Sie Datenbanken im Netzwerk verwalten. Mit wenigen Mausklicks kommen Sie Problemen auf die Spur, bereiten Datenbanken für die Wartung vor und kommunizieren mit allen angemeldeten Anwendern in Echtzeit:

http://www.add-in-world.com/katalog/ta_admin/


 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 eine oder mehrere Fragen aus und beantwortet Sie an dieser Stelle im Newsletter.

Bericht zweimal anzeigen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Mich beschäftigt folgendes Problem: Ein Bericht liefert eine Auswertung für mehrere Abteilungen oder Filialen. Ich möchte diesen Bericht gerne zweimal öffnen und nebeneinander angeordnet anzeigen, damit ich Zahlen verschiedener Abteilungen vergleichen kann. Wenn ich zweimal "DoCmd.OpenReport" verwende, wird der Bericht geöffnet, das zweite "DoCmd.OpenReport" aktiviert aber nur den zuerst geöffneten Bericht, anstatt eine Kopie zu öffnen. Lässt sich dieses Problem irgendwie lösen?
L. Riehmann

 ANTWORT:  "DoCmd.OpenReport" können Sie für diese Aufgabe nur bedingt einsetzen, da es bei der Ausführung über die Auflistung "Reports" prüft, ob der gewünschte Bericht bereits geöffnet ist - wenn ja, wird er einfach aktiviert. Sie können aber einen Bericht ein zweites Mal als Objekt öffnen und anzeigen. Eine API-Funktion hilft dann, die beiden Berichte nebeneinander anzuordnen:

  1. Legen Sie ein neues Formular mit einer Schaltfläche "btnBerichteAnzeigen" oder ähnlich an.
  2. Geben Sie im allgemeinen Teil des Formularmoduls folgende Deklaration ein:
Private Declare Function SetWindowPos _
                 Lib "user32" (ByVal hwnd As Long, _
                 ByVal hWndInsertAfter As Long, _
                 ByVal X As Long, ByVal Y As Long, _
                 ByVal W As Long, ByVal H As Long, _
                 ByVal wFlags As Long) As Long

  • Geben Sie für die Ereignisprozedur "Beim Klicken" der Schaltfläche die folgenden Anweisungen ein:
Private Sub btnTest_Click()
  Dim R1 As Report, R2 As Report

  '1. Bericht "normal" öffnen und referenzieren
  DoCmd.OpenReport "Testbericht", acViewPreview
  Set R1 = Reports("Testbericht")
  SetWindowPos R1.hwnd, 0&, 50, 50, 500, 800, 0&
  '2. Bericht als Objekt öffnen
  Set R2 = New Report_Testbericht
  SetWindowPos R2.hwnd, 0&, 550, 50, 500, 800, 0&
  R2.Visible = True

  Set R1 = Nothing
  Set R2 = Nothing

End Sub

"Testbericht" ersetzen Sie dabei durch den Namen des betreffenden Berichtes. Bei Eingabe der Zeile "Set R2 = New " wählen Sie aus dem dann angezeigten Dropdown-Menü den Eintrag "Report_NameIhresBerichtes" aus.

  • Speichern Sie das Formular, lassen Sie es einmal testweise anzeigen und klicken Sie auf die Schaltfläche.
Der Bericht wird zunächst "normal" über "DoCmd.OpenReport" geöffnet und darauf eine Referenz in "R1" gesetzt. Der Aufruf von "SetWindowPos" setzt dann das Fenster dieses über dessen Eigenschaft "hWnd" adressierten Berichtes an die angegebenen Koordinaten, die in Access-Notation den Eigenschaften "Left, Top, Width, Height" entsprechen. Diese Eigenschaften kann man nicht direkt setzen, da sie "read only" sind, deshalb der Einsatz der API-Funktion. Anschließend legen wir eine Kopie des Bericht-Objektes in "R2" an, positionieren diesen per "SetWindowPos" neben dem zuerst geöffneten Berichtsfenster und machen den Bericht per "Visible = True" sichtbar. Mit den hier verwendeten Koordinaten für "SetWindowPos" müssen Sie ein wenig experimentieren und die Werte Ihren Anforderungen anpassen - sie sind hier für die Anzeige auf einem Bildschirm mit der Auflösung "1.024*768" ausgelegt. Die Angaben erfolgen übrigens in "Pixel", nicht wie bei Access sonst üblich, in "Twips"!

ANZEIGE 
Tools und Assistenten für Access-Entwickler

Mit den Total Visual CodeTools 2003 erweitern Sie Access um eine umfangreiche Sammlung neuer Tools und Assistenten speziell für VBA-Entwickler.

Die Total Visual CodeTools 2003 integrieren sich direkt in die Entwicklungsumgebung und lassen sich jederzeit per Mausklick aufrufen. Zum Beispiel:

  • Code Cleanup zur automatischen Aufbereitung und Standardisierung von vorhandenem Code.
  • Voll automatische CodeBuilder für Recordsets, SQL-Statements, Message-Boxen, Select-Case-Anweisungen etc.
  • Assistent für neue Prozeduren mit Kommentarkopf, Fehlerbehandlung und Namenskonventionen nach Ihren Vorgaben
  • Der Code Delivery Wizard fügt automatisch Zeilennummern hinzu (für punktgenaue Fehlermeldungen), entfernt Debugging-Code, den Sie übersehen haben und macht den Sourcecode für Unbefugte Dritte unlesbar.
Weitere Informationen finden Sie unter:

http://www.add-in-world.com/katalog/tv_code2003/


Eingaben in alle Felder sicherstellen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Gibt es eine einfache Möglichkeit, Eingaben in alle Felder eines Formulars sicherzustellen, ohne im Entwurfsmodus der Tabelle für jedes Feld einzeln die Eigenschaft "Eingabe erforderlich" auf "Ja" zu setzen?
N. Berghaus

 ANTWORT:  Sie können in der Ereignisprozedur "Beim Entladen" eines Formulars folgende Anweisungen eingeben, die jedes Textfeld und jedes Kombinationsfeld prüfen. Wenn mindestens ein Feld leer ist, wird eine Fehlermeldung angezeigt und das Schließen des Formulars unterbunden:

Private Sub Form_Unload(Cancel As Integer)
  Dim C As Control

  For Each C In Me.Controls
    If TypeOf C Is TextBox Or TypeOf C Is ComboBox Then
      If IsNull(C) Or IsEmpty(C) Then
        Beep
        MsgBox "Bitte Daten in alle Felder eingeben!", _
               vbOKOnly + vbCritical, "Eingaben prüfen!"
        Cancel = True
        Exit For
      End If
    End If
  Next C

End Sub

Möglich ist das über den Parameter "Cancel" der Ereignisprozedur "Form_Unload". Wenn er auf "True" gesetzt wird, bricht Access den Schließenvorgang ab, so dass der Anwender gezwungen werden kann, vor dem Verlassen des Formulars Eingaben in alle Felder zu tätigen.

Nachtrag: Erweiterte MultiInstr()-Funktion
Versionen: Access 2003, 2002/XP, 2000 und 97

Zum Beitrag "'InStr' fuer mehrere Zeichen" aus Access Weekly vom 16.12.2005 hat uns Access Weekly-Leser G. Weil folgende Erweiterung zugesendet, die wir hier dankend weitergeben:

In ihrem Newsletter haben sie den Tipp 'InStr' für mehrere Zeichen vorgestellt. Ich habe die Funktion so verändert, dass nicht nur die Anzahl von bestimmten Zeichen, sondern die enthaltenen Zeichen selbst zurückgegeben werden:

Function MultiInStr(aStr As Variant, _
                    theChars As String) As Variant
  Dim I As Integer, Zeichen As String

  Zeichen = ""
  For I = 1 To Len(theChars)
    If InStr(aStr, Mid$(theChars, I, 1)) <> 0 Then
      Zeichen = Zeichen & Mid$(theChars, I, 1)
    End If
  Next I
  MultiInStr = Zeichen

End Function

Der Aufruf der Funktion sieht dann beispielsweise so aus:

If MultiInStr(strTelefon, "-/()") <> "" Then
  MsgBox("Die Telefonnummer enthält folgende " & _
         "Sonderzeichen: " & _
         MultiInStr(strTelefon, "-/()"))
End If

War die Helpline für Sie hilfreich? Klicken Sie bitte hier!

 Newsletter-Tipp

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:

  • Professionelle Tipps zum effektiveren Arbeiten
  • Undokumentierte Parameter
  • Fertige VBA-Prozeduren für neue Funktionen
  • Aktuelle Informationen über Sicherheitslücken, Bugs und Patches
  • Download-Links zu Outlook-Erweiterungen
  • Helpline für Ihre Fragen zu Outlook
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 © 2006 SmartTools Publishing Thomas Tai
Luisenstrasse 52, 49565 Bramsche
Telefon: 05461/9952-0, Fax: 05461/2609
E-Mail: access-weekly@smarttools.de
Internet: http://www.smarttools.de/

Alle Rechte vorbehalten. Kein Teil dieses Newsletters darf in irgendeiner Form ohne schriftliche Genehmigung reproduziert, vervielfältigt oder verbreitet werden. Für die Nutzung der enthaltenen Informationen oder die fehlerfreie Funktion wird keine Haftung übernommen. Der Benutzer ist für eventuell entstehende Schäden alleine verantwortlich.