Von: access-weekly-html-request@smarttools.de im Auftrag von SmartTools Publishing [access-weekly-html-reply@smarttools.de]
Gesendet: Freitag, 24. März 2006 00:33
An: Access Weekly Abonnenten
Betreff: SmartTools Access Weekly vom 24.3.2006

Ausgabe vom 24. März 2006

 In dieser Ausgabe

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

Spotlight: Die umfangreichste Sourcecode-Bibliothek für Access

Das Total Visual SourceBook ist das absolute Muss für jeden Entwickler in Access 2003, 2002/XP und 2000. Für Ihre Projekte in Access erhalten Sie komplett ungeschützten, offenen und frei verwendbaren Sourcecode. Alles in allem erhalten Sie:

  • Mehr als 160 Klassen und Module...
  • Über 2.300 Prozeduren...
  • Über 85.000 Zeilen Quellcode...
Das alles gibt es derzeit mit über 10% Rabatt zur freien Verwendung in beliebig vielen Applikationen. Damit steht Ihnen jederzeit das Know-how von einem ganzen Team erfahrener Entwickler per Mausklick zur Verfügung.

Alle Prozeduren sind getestet, voll dokumentiert und so entwickelt, dass Sie sie sofort in Ihren Projekten einsetzen können. Sie können die Bibliothek außerdem mit wenig Aufwand um Ihre persönlichen Prozeduren erweitern und so Stück für Stück Ihre individuelle Code-Datenbank aufbauen. Weitere Infos unter:

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

Download-Tipp: Access-Berichte voll automatisch nacheinander ausgeben

Die Ausgabe von Access-Berichten kann einige Zeit in Anspruch nehmen, wenn es sich um große Datenmengen handelt oder Berechnungen enthalten sind. Mit dem kostenlosen SmartTools MultiPrint für Access müssen Sie in Zukunft nicht mehr wartend vor dem Rechner sitzen, sondern verlegen den Ausdruck Ihrer Berichte ganz einfach in die Mittagspause oder auf den Feierabend.

Nach der automatischen Installation steht Ihnen ein neuer Menüpunkt zur Verfügung, über den Sie MultiPrint jederzeit aufrufen können. Der Assistent zeigt eine Liste aller verfügbaren Berichte an und Sie markieren einfach die gewünschten Einträge. Ein weiterer Mausklick genügt dann und Access gibt voll automatisch einen Bericht nach dem anderen aus:

 SmartTools MultiPrint kostenlos herunterladen!

Techinfo: SQL Server 2005 Express in eigene Anwendungen einbinden

Mit dem SQL Server 2005 Express stellt Microsoft eine kostenlose SQL-Engine als Nachfolger für die bekannte MSDE zur Verfügung. Diese SQL-Engine können Sie, ohne Lizenzen erwerben zu müssen, in eigene Back-End-/Front-End-Lösungen einbinden und auch weitergeben. Dabei sind allerdings einiger Einschränkungen und Besonderheiten zu beachten, die die MSDN-Spezialisten in der folgenden Techinfo erläutern:

Techinfo zu SQL Server 2005 Express

Waren die News & Downloads hilfreich für Sie? Klicken Sie bitte hier!

 Access-Tipp der Woche

Universelle Auswahldialoge für Ihre Datenbanken, Teil 2
Versionen: Access 2003, 2002/XP, 2000 und 97

Im ersten Teil dieses Tipps der Woche hatten wir Ihnen zunächst Lösungen für die Anzeige einer Ordner-Auswahl basierend auf den Windows Common Controls und dem Access 2002/2003-Objekt "FileDialogs" vorgestellt. Im zweiten Teil geht es nun um Funktionen zum Thema "Datei öffnen" und "Datei speichern". Solche Funktionen benötigen Sie regelmäßig, um beispielsweise die Anwender einer Datenbank eine zu importierende Datei wählen oder um das Ziel für einen Export festlegen zu lassen. Auch hier sind wieder verschiedene Lösungen auf Basis der Windows Common Controls und dem Access 2002/2003-Objekt "FileDialogs" möglich.

Schauen wir zunächst einmal, wie Funktionen wie "OpenFile()" und "SaveFile()" mit Hilfe der Windows Common Controls umgesetzt werden können. Hier stehen die API-Funktionen "GetOpenFilename()" und "GetSaveFilename()" zur Verfügung. Beide Funktionen arbeiten mit einer Datenstruktur "OPENFILENAME", über die vor dem Aufruf verschiedene Eigenschaften wie das Startverzeichnis für die Auswahl, der Text für die Titelleiste oder die Einträge für das Dropdown-Menü "Dateityp" spezifiziert werden. Nach dem Aufruf enthält diese Struktur den gewählten Dateinamen inklusive Laufwerk und Pfad. Um die Initialisierung und Auswertung der Datenstruktur zu vereinfachen, erfolgt der Aufruf über zwei Funktionen "OpenFile()" und "SaveFile", denen als Parameter jeweils das Startverzeichnis für die Auswahl sowie der Text für die Titelleiste übergeben wird.

Um diese Funktionen in Ihren Datenbanken zu nutzen, legen Sie ein neues Modul "modDatDlgs" oder ähnlich an und kopieren die folgenden Deklarationen und Funktionen in das Modul:

Type OPENFILENAME
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  lpstrFilter As String
  lpstrCustomFilter As String
  nMaxCustFilter As Long
  nFilterIndex As Long
  lpstrFile As String
  nMaxFile As Long
  lpstrFileTitle As String
  nMaxFileTitle As Long
  lpstrInitialDir As String
  lpstrTitle As String
  flags As Long
  nFileOffset As Integer
  nFileExtension As Integer
  lpstrDefExt As String
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_PATHMUSTEXIST = &H800

Private Declare Function GetOpenFilename _
                Lib "comdlg32.dll" _
                Alias "GetOpenFileNameA" _
               (pOpenfilename As OPENFILENAME) As Long

Private Declare Function GetSaveFileName _
                Lib "comdlg32.dll" _
                Alias "GetSaveFileNameA" _
                (pOpenfilename As OPENFILENAME) As Long

Dim OFN As OPENFILENAME

Function OpenFile(strVerzeichnis As String, _
                  strTitel As String) As String
  Dim strFilter As String
  Dim strDateinameUndPfad As String
  Dim strDateiname As String
  Dim lngErgebnis As Long

' Angebotene Dateifilter in der Dropdownliste "Dateityp"
  strFilter = "Excel-Arbeitsmappen (*.xls)" & Chr$(0) & _
              "*.XLS" & Chr$(0)

' Vorgegebenes Verzeichnis
  If strVerzeichnis = "" Then
    ' Wenn leer, dann das aktuelle Verzeichnis verwenden
    strVerzeichnis = CurDir$ & Chr$(0)
  Else
    ' "0" an übergebenes Verzeichnis anhängen
    strVerzeichnis = strVerzeichnis & Chr$(0)
  End If

  If strTitel = "" Then
    ' Wenn kein Titel übergeben, Standardtitel festlegen
    strTitel = "Datei-Öffnen:"
  Else
    ' "0" an übergebenen Titel anhängen
    strTitel = strTitel & Chr$(0)
  End If

' Speicherplatz für Dateinamen & Pfad reservieren
  strDateinameUndPfad = Space$(255) & Chr$(0)

' Speicherplatz für Dateinamen ohne Pfad reservieren
  strDateiname = Space$(255) & Chr$(0)

'Datenstruktur OFN initialisieren
  With OFN
    .lStructSize = Len(OFN)
    .hwndOwner = Application.hWndAccessApp
    .lpstrFilter = strFilter
    .nFilterIndex = 1
    .lpstrFile = strDateinameUndPfad
    .nMaxFile = Len(strDateinameUndPfad)
    .lpstrFileTitle = strDateiname
    .nMaxFileTitle = Len(strDateiname)
    .lpstrInitialDir = strVerzeichnis
    .lpstrTitle = strTitel
    .flags = OFN_FILEMUSTEXIST Or _
             OFN_PATHMUSTEXIST Or _
             OFN_HIDEREADONLY
    .nFileOffset = 0
    .nFileExtension = 0
    .lCustData = 0
    .lpfnHook = 0
    .lpTemplateName = ""
  End With
  lngErgebnis = GetOpenFilename(OFN)

  If lngErgebnis <> 0 Then
      OpenFile = Left(OFN.lpstrFile, _
                      InStr(OFN.lpstrFile, Chr$(0)) - 1)
  Else
      OpenFile = ""
  End If

End Function

Function SaveFile(strVerzeichnis As String, _
                  strTitel As String) As String

  Dim strFilter As String
  Dim strDateinameUndPfad As String
  Dim strDateiname As String
  Dim lngErgebnis As Long

' Angebotene Dateifilter in der Dropdownliste "Dateityp"
  strFilter = "Excel-Arbeitsmappen (*.xls)" & Chr$(0) & _
              "*.XLS" & Chr$(0)

' Vorgegebenes Verzeichnis
  If strVerzeichnis = "" Then
    ' Wenn leer, dann das aktuelle Verzeichnis verwenden
    strVerzeichnis = CurDir$ & Chr$(0)
  Else
    ' "0" an übergebenes Verzeichnis anhängen
    strVerzeichnis = strVerzeichnis & Chr$(0)
  End If

  If strTitel = "" Then
    ' Wenn kein Titel übergeben, Standardtitel festlegen
    strTitel = "Datei speichern:"
  Else
    ' "0" an übergebenen Titel anhängen
    strTitel = strTitel & Chr$(0)
  End If

' Speicherplatz für Dateinamen & Pfad reservieren
  strDateinameUndPfad = Space$(255) & Chr$(0)

' Speicherplatz für Dateinamen ohne Pfad reservieren
  strDateiname = Space$(255) & Chr$(0)

'Datenstruktur OFN initialisieren

  With OFN
    .lStructSize = Len(OFN)
    .hwndOwner = 0&
    .hwndOwner = Application.hWndAccessApp
    .lpstrFilter = strFilter
    .nFilterIndex = 1
    .lpstrFile = strDateinameUndPfad
    .nMaxFile = Len(strDateinameUndPfad)
    .lpstrFileTitle = strDateiname
    .nMaxFileTitle = Len(strDateiname)
    .lpstrInitialDir = strVerzeichnis
    .lpstrTitle = strTitel
    .flags = OFN_HIDEREADONLY Or _
             OFN_OVERWRITEPROMPT
    .nFileOffset = 0
    .nFileExtension = 0
    .lCustData = 0
    .lpfnHook = 0
    .lpTemplateName = ""
  End With

  lngErgebnis = GetSaveFileName(OFN)

  If lngErgebnis <> 0 Then
    SaveFile = Left(OFN.lpstrFile, _
                    InStr(OFN.lpstrFile, Chr$(0)) - 1)
  Else
   SaveFile = ""
  End If

End Function

Die beiden Funktionen "OpenFile()" und "SaveFile()" zeigen jeweils einen Datei-Auswahl-Dialog an und liefern den vom Anwender ausgewählten Dateinamen inklusive Laufwerk und Pfad. Sie können diese Funktionen zum Beispiel einsetzen, um damit per "DoCmd.TransferSpreadsheet" eine Excel-Tabelle in eine Access-Tabelle zu importieren oder um damit eine Access-Tabelle in eine Excel-Arbeitsmappe zu exportieren. Als Parameter übergeben Sie ein Vorgabe-Verzeichnis, aus dem die betreffenden Dateien zum Öffnen angezeigt bzw. in dem eine Datei gespeichert werden soll. Über den zweiten Parameter spezifizieren Sie einen in der Titelleiste des Dialogs anzuzeigenden Hinweis wie zum Beispiel "Tabelle importieren aus Datei:" oder "Tabelle exportieren in Datei:". Das Ergebnis ist entweder eine leere Zeichenkette (""), wenn der Anwender auf Abbrechen geklickt hat oder der gewählte Dateiname inklusive Laufwerk und Pfad.

Wenn Sie andere Dateitypen als "XLS" zur Auswahl anzeigen möchten, passen Sie die Funktionen in der folgenden Zeile, die jeweils identisch ist, an:

' Angebotene Dateifilter in der Dropdownliste "Dateityp"
  strFilter = "Excel-Arbeitsmappen (*.xls)" & _
               Chr$(0) & "*.XLS" & Chr$(0)

Die Angabe besteht aus zwei Teilen, die jeweils durch ein Nullbyte "Chr$(0)" zu trennen sind. Der vordere Teil definiert den Text, der in der Liste "Dateityp" angezeigt wird, der hintere Teil definiert die Dateimaske für die Auswahl, wobei Wildcards (*, ?) erlaubt sind. Sie können hier auch mehrere Dateimasken definieren, indem Sie sie durch Semikolon trennen:

strFilter = "Word-Dateien (*.doc;*.dot)" & _
            Chr$(0) & "*.DOC;*.DOT" & Chr$(0)

Mit Office XP hat Microsoft wie bereits erwähnt das Objekt "FileDialogs" eingeführt, das ohne externe API-Funktionen und komplexe Datenstrukturen auskommt und zudem komfortabler zu handhaben ist. Die oben gezeigten Funktionen können jedoch auch problemlos mit Access 2003 und 2002/XP eingesetzt werden! Das FileDialog-Objekt kann generell in allen Office-Anwendungen eingesetzt werden. Es gehört jedoch nicht zum jeweiligen Objektmodell der Office-Anwendung, sondern ist zentral über die Objekt-Bibliothek "Microsoft Office X.x Object Library" verfügbar (X.x= 11.0 für Office 2003 und 10.0 für Office XP). Bevor Sie in Ihren Lösungen mit diesem Objekt arbeiten können, ist also zunächst über das Menü Extras-Verweise eine Referenz auf diese Bibliothek zu setzen.

Die auf "FileDialogs" basierenden Funktionen "OpenFile()" und "SaveFile()" sind wie folgt aufgebaut:

Function OpenFile(strTitle As String, _
                  strPath As String, _
                  strButton As String) As String
  Dim fDlg As FileDialog

  Set fDlg = Application.FileDialog(msoFileDialogOpen)
  With fDlg
    .Title = strTitle
    .InitialFileName = strPath
    .ButtonName = strButton
    .Show
    If .SelectedItems.Count = 0 Then Exit Function
    OpenFile = .SelectedItems(1)
  End With

End Function

Function SaveFile(strTitle As String, _
                  strPath As String, _
                  strButton As String) As String
  Dim fDlg As FileDialog

  Set fDlg = Application.FileDialog(msoFileDialogSaveAs)
  With fDlg
    .Title = strTitle
    .InitialFileName = strPath
    .ButtonName = strButton
    .Show
    If .SelectedItems.Count = 0 Then Exit Function
    SaveFile = .SelectedItems(1)
  End With

End Function

Als Parameter übergeben Sie neben dem Startverzeichnis für die Auswahl und dem Text für die Anzeige in der Titelleiste einen Text für die Beschriftung der Auswahl-Schaltfläche. Statt Öffnen" können Sie zum Beispiel "Importieren" oder "Exportieren" anzeigen lassen. Das Ergebnis beider Funktionen ist eine leere Zeichenkette "", wenn auf Abbrechen geklickt wurde oder der Name der gewählten Datei inklusive Laufwerk und Pfad.

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

ANZEIGE 
PDF-Dateien direkt in Word öffnen - Der PDFgrabber 3.0 Home so günstig wie nie

Der PDFgrabber wandelt PDF-Dateien in Word-Dokumente um, so dass Sie sie bearbeiten oder in Ihren eigenen Texten verwenden können. Mit der neuesten Version 3.0 des bewährten PDFgrabber wurde die Ausgabequalität noch einmal optimiert und ein Menüpunkt zum Öffnen von PDF-Dateien direkt in Word integriert.

Für die Umwandlung von PDF-Dokumenten mit dem PDFgrabber brauchen Sie nur 3 Schritte:

  1. Starten Sie den PDFgrabber über das Start-Menü oder direkt aus Word über das neu installierte Menü PDF-Datei öffnen.
  2. Wählen Sie ein PDF-Dokument aus.
  3. Ein Mausklick startet die Umwandlung, die voll automatisch abläuft. Am Ende steht Ihnen das Word-Dokument zur direkten Bearbeitung zur Verfügung.
Ganz neu im Angebot von SmartTools Publishing: mit dem PDFgrabber 3.0 Home war es noch nie so günstig, PDF-Dateien in Word zu bearbeiten:

http://www.add-in-world.com/katalog/pdfgrabber-home/


 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.

Ersatz für 'CurrentDb.Execute'
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Ich verwende häufig Code aus alten Entwicklungen und bekomme zunehmend Probleme unter Access 2003. Wie kann ich zum Beispiel folgende "alte" Routine

CurrentDb().Execute "SQL-Anweisung"

ersetzen, ohne DAO 3.6-Objekte zu verwenden?
Chr. Hofmann

 ANTWORT:  Verwenden Sie stattdessen einfach die folgende Anweisung:

DoCmd.RunSQL "SQL-Anweisung", False

"DoCmd.RunSQL" ist unabhängig von DAO und ADO einsetzbar. Über den zweiten booleschen Parameter steuern Sie, ob die SQL-Anweisung mit Transactions ausgeführt werden soll oder nicht.

Gültigen Dateinamen erzeugen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  Ich habe eine Lösung entwickelt, mit der meine Anwender das Ergebnis der aktuellen formularbasierten Filterung als Datenquelle für den Word-Seriendruck in eine Excel-Tabelle exportieren können. Den Namen der anzulegenden Arbeitsmappe erfrage ich per "InputBox()". Dabei werden häufig Zeichen eingegeben, die nicht Bestandteil eines Dateinamens sein dürfen und beim Export zu Fehlermeldungen führen. Wie lassen sich solche Zeichen ausfiltern?
F. Scherer

 ANTWORT:  Geben Sie zunächst die folgende Funktion in einem neuen oder in einem vorhandenen Modul ein:

Function FileSysName(strFName As String) As String
  Dim strInvalid As String, strNew As String
  Dim I As Long

  strInvalid = "\/:+*?<>|" & Chr$(34)
  strNew = strFName
  For I = 1 To Len(strNew)
    If InStr(strInvalid, Mid$(strNew, I, 1)) <> 0 Then
      Mid$(strNew, I, 1) = "_"
    End If
  Next I
  FileSysName = strNew

End Function

Ändern Sie dann den Aufruf von "InputBox()" beispielsweise wie folgt:

strFName = InoutBox("Name für die Exportdatei:")
strFName = FileSysName(strFName)

Die Funktion prüft jedes einzelne Zeichen der Eingabe auf ungültige, in "strInvalid" spezifizierte Zeichen hin und ersetzt sie ggf. durch einen Unterstrich.

ANZEIGE 
Personal-, Belegungs- und Zeitpläne in Access grafisch darstellen

Hier ist die perfekte Erweiterung für alle Datenbanken, in denen Sie freie und gebuchte/belegte/vergebene Zeiten verwalten: Sie müssen in einer Tabelle lediglich Start- und Enddatumsangaben der einzelnen Vorgänge verwalten und diese Lösung setzt Ihre Daten voll automatisch in ein übersichtliches Balkendiagramm um.

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.
Die aktuelle Version 2.11 bietet unter anderem jetzt eine Druckfunktion, eine komfortable Feiertagsverwaltung sowie die Integration von Kürzeln für noch aussagekräftigere Darstellungen.

SmartTools Publishing bietet Ihnen diese Lösung in einer komplett ungeschützten Entwicklerversion ohne jegliche Einschränkungen an:

http://www.add-in-world.com/katalog/ac-belegungsplan/


Textfeld ohne Fehlermeldung auslesen
Versionen: Access 2003, 2002/XP, 2000 und 97

 FRAGE:  In meinem Formular verwende ich folgende Anweisungen zur Überprüfung einer Eingabe:

strNachname = Me.Nachname
If strNachname = "" Then
  Beep
  Me.Nachname.Setfocus
End If

Wenn keine Eingabe erfolgte, führt dies zu einer Fehlermeldung "Ungültige Verwendung von NULL". Wie kann ich diese Meldung vermeiden?
R. Zeitler

 ANTWORT:  Das Problem resultiert daraus, dass ein Feld ohne Eingabe "NULL" liefert, "NULL" aber keiner Zeichenkettenvariablen zugewiesen werden kann. Im die Fehlermeldung zu vermeiden, gibt es verschiedene Möglichkeiten. Zunächst können Sie mit "IsNull()" prüfen, ob in das Feld etwas eingegeben wurde:

If IsNull(strNachname) Then
  Beep
  Me.Nachname.Setfocus
End If

Diese Abfrage führt aber nicht zum erwünschten Ergebnis, wenn der Anwender den Feldinhalt gelöscht hat. Das Feld ist dann nicht "NULL", sondern leer (""). Um beide Zustände in einem abzufragen, verwenden Sie folgende Konstruktion:

If IsNull(strNachname) Then
  Beep
  Me.Nachname.Setfocus
End If

Die Verknüpfung mit einer leeren Zeichenkette '& ""' liefert bei einem leeren Feld 'NULL & ""' und somit eine leere Zeichenkette "", die einer Zeichenkettenvariablen zugewiesen werden kann. Hat das Feld einen Inhalt, spielt dies keine Rolle, da er durch die Verknüpfung mit einer leeren Zeichenkette nicht verändert wird.

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

 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.