Von: access-weekly-html-request@smarttools.de im Auftrag von SmartTools Publishing [access-weekly-html-reply@smarttools.de]
Gesendet: Donnerstag, 12. Januar 2006 21:42
An: Access Weekly Abonnenten
Betreff: SmartTools Access Weekly vom 13.1.2006

Ausgabe vom 13. Januar 2006

 In dieser Ausgabe

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

Sonderaktion: Kalender- und Zeitplanungsvorlagen + CD 'Personalplanung und Dienstpläne' als kostenlose Zugabe!

Mit dem Digitalen Zeitplaner können Sie Excel schnell und komfortabel für Zeit- und Projektplanungen aller Art einsetzen. Die Vorlagen sind komplett ungeschützt: Kopieren Sie die Vorlagen also beliebig oft, um Ihre individuellen Planungskalender für Projekte, Veranstaltungen usw. zu erstellen. Zum Beispiel:

  • Individuelle Jahresübersichten, die sich im Baukastensystem zusammenstellen lassen (z.B. von September bis September oder je nach Projektdauer auch über längere Zeiträume als ein Jahr).
  • Übersichtliche Urlaubsplanung mit einer automatischen Ganzjahresübersicht.
  • Balken- bzw. Ablaufdiagramme für beliebige Zeiträume.
  • Komfortable Außendienst-Übersicht. Die Mitarbeiter tragen ein, wo sie wann sind. Alle wissen Bescheid und können Auskunft geben.
  • Die meisten Planungsgerüste sind endlos - Sie geben einfach die Jahreszahl an und der Kalender erstellt sich voll automatisch.
  • Jahres-Statistik - auf genial einfache Weise können Sie Ihre Geschäftsentwicklung grafisch verfolgen.
  • Für jeden Planungszweck gibt es eine andere Jahres-Struktur: Monate horizontal oder vertikal angeordnet, mit oder ohne KW-Angaben, mit oder ohne Feiertage, ganz weiß oder ganz bunt usw. Alle sind fertig. Sie öffnen die für Ihren Zweck günstigste Tabelle und machen Ihre Eintragungen; auch im Netzwerk.
Aufgrund der großen Erfolges haben wir unsere Sonderaktion verlängert: bis zum 31.1.2006 erhalten Sie 2 CD-ROM's zum Preis von einer: Sie erhalten nicht nur den aktuellen Zeitplaner 2006, sondern zusätzlich die CD-ROM "Personalplanung und Dienstpläne" als kostenlose Zugabe!

Weitere Informationen finden Sie unter:

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

Download-Tipp: Komfortabler Kalender für Access-Formulare

Wenn Sie das Kalender-Steuerelement von Access einsetzen, haben Sie mit vielen Einschränkungen zu kämpfen. So lassen sich Samstage, Sonntage, Feiertage oder Termine nicht besonders kenntlich machen, die aktuelle Kalenderwoche fehlt in der Anzeige ganz und es gibt keine Möglichkeit, ohne zusätzliche Programmierung zum aktuellen oder einem individuellen Datum zu springen. Außerdem ist zu natürlich beachten, dass das Kalender-Steuerelement bei der Weitergabe einer Datenbank auf dem Zielrechner registriert sein muss.

Der kostenlose SmartTools Kalender ist eine interessante Alternative: Sie können ihn flexibel in Ihre Datenbank einbinden, ohne zusätzliche Steuerelemente oder Komponenten zu benötigen. Dabei können Sie ihn vollkommen frei formatieren und beispielsweise Wochenenden, Feiertage und Termine mit speziellen Farben hervorheben:

 SmartTools Kalender kostenlos herunterladen!

Techinfo: Access-Datenbanken optimal entwickeln und verteilen

Wenn Sie Ihre Datenbanken nicht nur für sich selbst und den lokalen Einsatz auf Ihrem Rechner entwickeln, sondern sie beispielsweise an Kollegen oder Kunden weitergeben möchten, sind bei der Entwicklung viele Dinge beispielsweise in Bezug auf die Benutzeroberfläche oder zur Absicherung zu beachten. Zu diesem Thema haben die MSDN-Spezialisten einen zweiteiligen Leitfaden verfasst, der Ihnen bei der Entwicklung solcher Datenbanken hilfreich zur Seite steht:

Leitfaden zur Datenbankentwicklung - Teil 1

Leitfaden zur Datenbankentwicklung - Teil 1

Der Leitfaden ist für Access 2003 ausgelegt, lässt sich auch auf ältere Access-Versionen anwenden.

In Teil 1 helfen die Autoren zunächst bei der Beantwortung der Frage, ob die Access Runtime-Umgebung notwendig ist oder nicht. Abhängig davon erhalten Sie nützliche Tipps und Hinweise zur weiteren Entwicklung der Datenbank. Weitere Abschnitte zeigen, wie Sie eine kontextsensitive Hilfe in die Datenbank einbauen oder die Steuerung der Datenbank und deren Funktionen über Symbolleisten vereinfachen. Teil 2 erläutert zunächst Optionen, die das Startverhalten von Access beeinflussen und wie Sie darüber beispielsweise Menüs oder andere Elemente der Benutzeroberfläche ausblenden oder durch eigene ersetzen. Weitere Abschnitte erklären Details zur Absicherung einer Datenbank, zum Einsatz der Access Runtime-Umgebung und zur Verwendung einer MDE-Datenbank in diesem Umfeld. Den Abschluss bilden dann praktische Ratschläge, wie Sie Ihre Datenbank mit Hilfe des Verpackungs- und Weitergabe-Assistenten in ein Setup verwandeln und verteilen.

News: Wahl zum Tipp und Tool des Jahres 2005

In der letzten Ausgabe des vergangenen Jahres haben wir Sie um die Teilnahme an einer kleinen Umfrage teilzunehmen, in der der Access-Tipp und das Access-Tool des Jahres 2005 gewählt wird. Auf vielfachen Wunsch haben wir die Umfrage noch nicht geschlossen, sondern bieten noch eine Woche die Möglichkeit, uns Ihre Meinung zu den Tipps und Tools des vergangenen Jahres mitzuteilen.

Unter der folgenden Adresse finden Sie unseren virtuellen Fragebogen, den Sie ganz kurz mit wenigen Mausklicks ausfüllen können:

Wahl zum Tipp und Tool des Jahres 2005

 Access-Tipp der Woche

Word-Dokumente in Memofelder einlesen
Versionen: Access 2003, 2002/XP, 2000 und 97

Eine Möglichkeit, die Inhalte von Word-Dokumenten in eine Datenbank zu integrieren, besteht im Einsatz von Feldern des Datentyps "OLE". Oftmals erhalten Sie aber Word-Dokumente, deren Inhalte einfach nur in ein Memofeld übertragen werden sollen. Dazu müssen Sie Word starten, das Dokument öffnen, den Text markieren, in die Zwischenablage kopieren, nach Access wechseln und dort den Text aus der Zwischenablage in das Memofeld einfügen. Mit Hilfe von Office Automation lässt sich dieser Aufwand jedoch drastisch reduzieren: Eine kleine Funktion stellt eine Verbindung zu Word her, präsentiert hier den "Datei öffnen"-Dialog zur Auswahl des Dokumentes, öffnet die Datei und liefert dessen Inhalt als Ergebnis, das dann in ein Memofeld eingefügt werden kann. Um eine solche Lösung in Ihrer Datenbank zu nutzen, gehen Sie wie folgt vor:

  1. Wechseln Sie in die VBA-Entwicklungsumgebung.
  2. Setzen Sie über Extras-Verweise eine Referenz auf "Microsoft Word x.0 Object Libary", wobei Sie "x" durch "11" für Word 2003, "10" für Word 2002/XP, "9" für Word 2000 oder "8" für Word 97 ersetzen.
  3. Geben Sie dann in einem neuen oder einem vorhandenen Modul die folgende Funktion ein:
Function GetWordDOC() As String
  Dim appWord As Word.Application
  Dim objDOC As Word.Document
  Dim dlg As Word.Dialog
  Dim R As Variant, I As Long
  Dim strFName As String, strNew As String

  Set appWord = CreateObject("Word.Application")
  With appWord
    .Visible = True
    .Activate
    Set dlg = .Dialogs(wdDialogFileOpen)
    R = dlg.Display
    If R = -1 Then
      strFName = dlg.Name
      Set objDOC = .Documents.Open(strFName)
      .Selection.WholeStory
      R = .Selection.Range.Text
      objDOC.Close wdDoNotSaveChanges
    End If
    .Quit
  End With
  Set appWord = Nothing
  For I = 1 To Len(R)
    If Asc(Mid$(R, I, 1)) = 13 Then
      strNew = strNew & vbCrLf
    Else
      strNew = strNew & Mid$(R, I, 1)
    End If
  Next I

  GetWordDOC = strNew

End Function

  • Speichern Sie die Änderungen und verlassen Sie die VBA-Entwicklungsumgebung wieder.
  • Erweitern Sie das Formular mit dem Memofeld, in das Word-Dokumente eingelesen werden sollen, um eine Schaltfläche Word-Dokument Einlesen.
  • Geben Sie für die Ereignisprozedur "Beim Klicken" die folgenden Anweisungen ein:
Private Sub btnGetDoc_Click()
  Dim strText As String

  strText = GetWordDOC()
  If strText <> "" Then Me.Memofeld = strText

End Sub

"Memofeld" ersetzen Sie dabei durch den Namen des Memofeldes, in das in Ihrem Formular das Word-Dokument eingelesen werden soll.

  • Speichern Sie die Änderungen und lassen Sie das Formular einmal testweise anzeigen.
Ein Klick auf die Schaltfläche Word-Dokument Einlesen ruft dann die Funktion "GetWordDOC()" auf, die wie folgt arbeitet: Über "CreateObject()" starten wir zunächst eine neue Instanz von Word und legen eine Referenz darauf für den weiteren Zugriff auf Word in der Objektvariablen "appWord" ab. Diese beiden folgenden Anweisungen sorgen dafür, dass Word sichtbar und aktiviert in den Vordergrund geholt wird. Für die Auswahl des Word-Dokumentes benutzen wir den "Datei öffnen"-Dialog von Word und initialisieren dazu eine Objektvariable "dlg". Der Aufruf der Methode "Display" hat zur Folge, dass der Dialog zwar angezeigt wird, aber keinerlei Aktionen ausführt - darum kümmern wir uns im Anschluss selbst. Die Rückmeldung von "Display" gibt Aufschluss darüber, auf welche Schaltfläche der Anwender geklickt hat. "-1" steht hier für Ok oder Öffnen. Die nachfolgenden Anweisungen werden also nur bei tatsächlich erfolgter Auswahl eines Dokumentes ausgeführt.

Dabei gehen wir so vor, dass zunächst Pfad und Name der ausgewählten Datei aus dem Dialog ausgelesen und in eine Variable "strFName" übertragen werden. Über "Documents.Open" wird dieses Dokument dann geöffnet. Die Anweisung "Selection.WholeStory" markiert danach den kompletten Inhalt des Dokumentes, den wir dann schließlich der Variablen "R" zuweisen. Im Anschluss beenden wir Word und setzen die Objektvariable "appWord" zurück, um reservierten Speicher wieder freizugeben. Den Rest der Funktion bildet eine Schleife, in der wir den eingelesenen Text auf die Absatzendemarke (ASCII-Code "13") prüfen und gegebenenfalls durch "vbCrLf" ersetzen, damit der Text im Memofeld mit korrekten Zeilenumbrüchen angezeigt wird.

Achtung! Bitte beachten Sie, dass Word-Dokumente möglicherweise Grafiken, Bilder, AutoFormen oder andere Elemente enthalten, die in einem Memofeld nicht angezeigt werden können. Sie sehen dort dann anstelle der Grafik ein kleines Rechteck oder ein kryptisches Sonderzeichen. Nach dem Einlesen eines Word-Dokumentes muss also der Inhalt des Memofeldes auf solche Elemente geprüft werden.

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:

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


 Access-Helpline

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.

Datensätze per SQL verschieben
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Ich möchte gerne Datensätze, deren Feld "Erledigt" auf "Ja" gesetzt ist, von einer Tabelle in eine andere Tabelle verschieben und anschließend in der Ursprungstabelle löschen. Wie müssen die SQL-Anweisungen dazu aussehen?
G. Abraham

 ANTWORT:  Eine Lösung könnte folgendermaßen aussehen:

DoCmd.RunSQL "INSERT INTO [Erledigte Vorgänge] " & _
             "SELECT [Vorgänge].* FROM " & _
             "[Vorgänge] " & _
             "WHERE [Vorgänge].[Erledigt] = Yes"

Diese Anweisung selektiert zunächst alle Datensätze der Tabelle "Vorgänge", bei denen "Erledigt" auf "Ja" steht und fügt sie in die Tabelle "Erledigte Vorgänge" ein.

DoCmd.RunSQL "INSERT INTO [Erledigte Vorgänge] " & _
             "SELECT [Vorgänge].* FROM " & _
             "[Vorgänge] " & _
             "WHERE [Vorgänge].[Erledigt] = Yes"

Diese Anweisung löscht anschließend alle Datensätze aus der Ursprungstabelle "Vorgänge", bei denen "Erledigt" auf "Ja" steht.

Ausgabe von Nullwerten in Berichtsfeldern vermeiden
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  In Berichten wird bei numerischen Feldern, die keinen Inhalt haben, standardmäßig "0" ausgegeben. Wir möchten die Inhalte solcher Felder im Bericht aber einfach nur "leer" ausgegeben, um die Übersicht zu erhöhen. Wie können wir das erreichen?
K. Blohm

 ANTWORT:  Der Bericht "Rechnungen" in der bei Access mitgelieferten Beispieldatenbank "Nordwind" liefert dazu ein schönes Beispiel: Hier gibt es ein Feld "Rabatt", das bei Artikeln ohne Rabatt jeweils "0%" anzeigt. Dies und das oben geschilderte Problem lässt sich mit dem Einsatz benutzerdefinierter Formate lösen, die Sie einem Textfeld über dessen Eigenschaft "Format" zuweisen. Benutzerdefinierte Formate umfassen vier jeweils durch Semikolon getrennte Abschnitte:

1. Abschnitt für positive Zahlen
2. Abschnitt für negative Zahlen
3. Abschnitt für leere Werte
4. Abschnitt für Null-Werte

Um nun beispielsweise die Ausgabe von "0%" im Bericht "Rechnungen" zu vermeiden, käme folgendes Format zum Einsatz:

#.###%;#.###%;"";""

Dieses Format sorgt bei positiven und negativen Werten für eine Ausgabe der Form "20%" oder "-45%". Bei Leer- oder Null-Werten wird hingegen eine leere Zeichenkette ausgegeben und "0%" somit vermieden. Analog dazu verwenden Sie nun in Ihren Berichten beispielsweise folgendes Format:

#.###,00;#.###,00;"";""

Auf diese Weise zeigen Sie positive und negative Werte mit Tausendertrenner und zwei Nachkommastellen an, Leer- und Null-Werte werden unterdrückt. Detaillierte Informationen zu benutzerdefinierten Formaten können Sie abrufen, indem Sie den Cursor ins Feld "Format" des Eigenschaftenfenster eines Textfeldes setzen und F1 drücken.

ANZEIGE 
Barcodes komfortabel mit Access ausgeben

Barcode für Windows ist ein Komplettpaket zum Erstellen von Barcodes in Access, Excel und Word. Sie erhalten TrueType-Schriften sowie ein leistungsfähiges Programm zur Berechnung der Prüfziffern, das Sie komfortabel bedienen oder aus den Office- Applikationen heraus steuern können. Alle gängigen Barcodes sind enthalten. Unter anderem:

  • Code EAN 13, EAN 8, Addon -2 und -5, EAN Velocity
  • Code 128, EAN128, UPS128
  • Code 39, -extended, PZN
  • 2/5 Interleaved, 2/5 Industrie
  • Leit- und Identcode der Post
Weitere Informationen finden Sie unter:

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


Dateien und Verzeichnisse auf Existenz prüfen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Wir möchten gerne folgende Routine nutzen, um Datensicherungskopien von Datenbanken anzulegen, sofern die Datenbank nicht im Zielverzeichnis vorhanden ist:

strPath = "Z:\Test\"
strDatsi = "Z:\Datsi\"
strFName = Dir$(strPath & "*.mdb")
While strFName<> ""
  DoEvents
  If Dir$(strDatsi & strFName) = "" Then
    FileCopy strPath & strFName, strDatsi & strFName
  End if
  strFName = Dir$()
Wend

Die Routine funktioniert immer nur bis zur ersten Datenbank, die nicht im Zielverzeichnis vorhanden ist, danach wird das Nichtvorhandensein weiterer, ggf. zu sichernder Datenbanken nicht mehr erkannt. Was ist daran falsch?
U. Roth

 ANTWORT:  Sie können "Dir$()" nicht verschachtelt einsetzen, da der Aufruf ohne Parameter (strFName = Dir$()) sich immer am letzten Aufruf mit Parameter (If Dir$(strDatsi & strFName) = "" Then...) orientiert und so das ursprüngliche Ziel (strFName = Dir$(strPath & "*.mdb")) "vergisst". Abhilfe können Sie schaffen, indem Sie für die Abfrage auf Vorhandensein einer Datei (oder eines Verzeichnisses) eine Alternative einsetzen: Die Microsoft Scripting Runtime Library. Diese Systemerweiterung stellt Objekte bereit, über die Sie unter anderem auf das Dateisystem zugreifen und so Dateien und Verzeichnisse auf Vorhandensein prüfen können:

  1. Öffnen Sie ein vorhandenes oder ein neues Modul im Entwurfsmodus.
  2. Wählen Sie das Menü Extras-Verweise an, setzen Sie eine Referenz auf "Microsoft Scripting Runtime" und übernehmen Sie die Änderungen mit einem Klick auf Ok.
  3. Geben Sie im Modul die folgende Funktion ein:
Function CheckFileOrDirExists(strName As String) _
As Boolean

  Dim fso As Scripting.FileSystemObject

  Set fso = CreateObject("Scripting.FileSystemObject")
  If Right$(strName, 1) = "\" Then 'Verzeichnis
    CheckFileOrDirExists = fso.FolderExists(strName)
  Else
    CheckFileOrDirExists = fso.FileExists(strName)
  End If
End Function

  • Speichern Sie die Änderungen.
In Zukunft können Sie diese Funktion nun ohne Rücksicht auf einen eventuell parallel stattfindenden Einsatz der "Dir$()"- Funktion einsetzen, um das Vorhandensein von Dateien und Verzeichnissen beispielsweise wie folgt zu prüfen:

strPath = "Z:\Test\"
strDatsi = "Z:\Datsi\"
strFName = Dir$(strPath & "*.mdb")
While strFName<> ""
  DoEvents
  If Not CheckFileOrDirExists(strDatsi & strFName) Then
    FileCopy strPath & strFName, strDatsi & strFName
  End if
  strFName = Dir$()
Wend

Sie übergeben der Funktion also entweder den Namen der zu prüfenden Datei wahlweise mit Laufwerk und/oder Pfad oder den Pfad des zu prüfenden Verzeichnisses mit abschließendem Backslash. An einem eventuell vorhandenen abschließenden Backslash erkennt die Funktion zunächst, ob ein Verzeichnis oder eine Datei zu prüfen ist. Abhängig davon wird entweder die Funktion "FolderExists()" oder die Funktion "FileExitsts()" des FileSystemObjects aufgerufen.

 Newsletter-Tipp

Excel-Tipps kostenlos per E-Mail

SmartTools Excel Weekly ist ein kostenloser E-Mail-Newsletter, der Ihnen jede Woche interessante Tipps rund um Excel 2003, 2002/XP, 2000 und 97 liefert:

  • Neue Rechenfunktionen für Ihre Tabellen
  • Nützliche VBA-Prozeduren
  • Undokumentierte Parameter und Funktionen
  • Infos zu Bugs und Patches
  • Wichtige Download-Links
  • Helpline für Ihre Fragen zu Excel
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.