Access-Paradies im Internet

Die AP-Entwickler-Tools 2007 für Access - 28 offene Entwicklertools für nur 199,- EUR - aber nur für kurze Zeit!
 

  

::: Funktionen

 


Die Top Seite für Excel-VBA-Makros uvm.
Anwenderforum für Microsoft Office, Windows, VB
FAQ, kostenlose Tipps und Downloads zu Microsoft Office
Das große Visual-Basic Archiv
Access-Garhammer
Rainer's Archiv

::: Newsletter

 

Unser Newsletter informiert Sie topaktuell rund um alle Themen zu Microsoft Access, VBA usw.

 
  




::: ebay

 
1.000 Tage eBay Partnerprogramm - Volume II
 

1

 
  Tipps & Tricks -> Dateisystem / Laufwerk -> Dateiauswahldialog   



Kostenlose Tools und aktuelle News mit unserem monatlichen Access-Newsletter.
Jetzt eintragen!




Das Access-VBA Codebook

Neue Ausgabe!




Die VBA-Codesammlung, die bei keinem Entwickler
fehlen darf!



Mails senden, abrufen und decodieren - ganz easy ;-)

Das SMTP Control sendet, das POP3 Control empfängt und der Mail-Parser (Klassenobjekt) decodiert empfangene Mails im Handumdrehen - natürlich unter Berücksichtigung von Multi-Part MIME Nachrichten, Anlagen u.v.m.



von Günther Kramer

Erweiterter Verzeichnisdialog


Diese Funktion stellt den er-
weiterten Verzeichnisauswahl-
dialog zum Auswählen von Verzeichnissen zur Verfügung.

 
   
 
 
 
  Dateiauswahldialog
Kurzinfo: Dieser Tipp zeigt, wie man mit verschiedenen Möglichkeiten den Dateiauswahldialog darstellen kann.
Access-Version(en): Access 97, 2000 und XP
Autor: Stefan Kulpa
Homepage: http://www.kulpa-online.de


 
 

 

Auf der AP-Access-Tools Vol.1 finden Sie weitere 320 Tipps & Tricks sowie 250 Access-Beispiel/Anwendungen mit offenen Quellcode!

Die Access-Tools-CD mit über 400 MByte Inhalt - für Access- und VB-Entwickler

  • 256 Access-Beispiele mit offenem Code
  • 45 Add-Ins und ActiveX-Komponenten (Freeware)
  • 16 VB-Projekt inkl. Source
  • 321 Tipps & Tricks für Access und VB
  • Plus 11 Entwicklerversionen (9 davon mit Source!)
  • Plus 3 Vollversionen und
  • Plus riesiger Datenpool

    Holen Sie sich jetzt Ihre AP-Access-Tools-CD zum Superpreis von nur EUR 24,95!

  •  
     

    Der Dateiauswahldialog ist ein Windows eigener Systemdialog. Aus diesem Grund kann er von Windows Version zu Windows Version unterschiedlich aussehen – die Handhabung ist aber identisch.
    Man kann nun diesen Dialog entweder mithilfe des ActiveX-Controls (Microsoft Common Dialog Control bzw. Comdlg32.ocx im System-Verzeichnis) aufrufen oder mittels der Win32-API. Darüber hinaus gibt es eine Reihe von Freeware-/Shareware-Tools, die ebenfalls diesen Dialog aufrufen können – grundsätzlich funktionieren alle auf die gleichen Art und Weise; sie rufen den in Windows vorhandenen Systemdialog auf.

    Vorteil des ActiveX-Controls (Comdlg32.ocx):
    Einfache Handhabung

    Nachteil des ActiveX-Controls (Comdlg32.ocx):
    Das Control steht nur zur Verfügung, wenn entweder die Access Developer Edition oder aber Visual Basic Professional (oder höher) vorliegt. Das Control bzw. dessen Update ist zwar im Internet verfügbar, aber ohne eine bestehende Lizenzdatei nicht einsetzbar.

    Lösung 1: Nutzung des ActiveX-Controls (Comdlg32.ocx)

    Um das ActiveX-Control nutzen zu können, muss dieses Control zunächst eingebunden werden:
    Access: in der Formularansicht im Menü Einfügen den Punkt ActiveX-Steuerelement auswählen. In der daraufhin erscheinenden Liste Microsoft Common Dialog Control auswählen.
    Visual Basic: im Menü Projekt den Punkt Komponenten auswählen. In der daraufhin erscheinenden Liste Microsoft Common Dialog Control durch Aktivierung des Kontrollkästchens auswählen.

    Das Microsoft Common Dialog Control besitzt eine Vielzahl von Eigenschaften (Properies), da mit diesem Control nicht nur der Dateiauswahldialog aufgerufen werden kann, sondern auch weitere Systemdialoge:

    • Farbauswahldialog
    • Schriftenauswahldialog
    • Druckerauswahldialog
    • Aufruf des Windows Hilfesystems für eigene Hilfedateien

    Bei der Nutzung dieses Controls muss man sich zunächst entscheiden, ob der Dialog zum Öffnen einer Datei bestimmt ist, oder aber zum Speichern einer Datei. Der Unterschied liegt darin, dass beim Öffnen die ausgewählte Datei vorhanden sein muss, beim Speichern aber dies nicht unbedingt gegeben sein muss (Neuanlage einer Datei).
    Grundsätzlich jedoch führt das Control keinerlei Dateimanipulationen durch (Erstellen neuer Dateien etc.), sondern ist lediglich eine Schnittstelle zum Windows Dateisystem.

    Die Vielzahl der erwähnten Eigenschaften decken die genannten Systemdialoge ab. Daher sind für den Dateidialog auch alle diese Eigenschaften notwendig. Um das Control ordnungsgemäß benutzen zu können, stehen folgende Eigenschaften für den Dateiauswahldialog zur Verfügung:

    • CancelError Property
    • DefaultExt Property
    • DialogTitle Property
    • FileName Property
    • FileTitle Property
    • Filter und FilterIndex Property
    • Flags Property
    • InitDir Property
    • MaxFileSize Property

    Die hier genannten und nachfolgend erläuterten Eigenschaften beziehen sich auf das Control in der Version 6.0.

    Die Eigenschaft CancelError

    Mit dieser Eigenschaft kann man dafür sorgen, dass im Fall eines Abbruchs des Dialogs (Abbrechen-Schaltfläche) ein Laufzeitfehler erzeugt wird, der über ein entsprechendes Fehlerhandling abgefangen werden kann. Ist dieser Wert nicht gesetzt, wird auch beim Abbruch kein Laufzeitfehler erzeugt.
    Da es sich um einen Boolean-Wert handelt, muss diese Eigenschaft entweder mit True oder False gesetzt werden, wobei False die Standardeinstellung ist.

    Die Eigenschaft DefaultExt

    Mit dieser Eigenschaft kann man eine Standarddateierweiterung bestimmen. Wird beispielsweise der Dialog zum Speichern aufgerufen, die Standarddateierweiterung auf „.txt“ gesetzt und ein Dateiname ohne Erweiterung eingegeben, so wird diese Erweiterung automatisch an den Dateinamen angehängt.

    Die Eigenschaft DialogTitle

    Diese Eigenschaft steht nur für den Dateiauswahldialog zur Verfügung und erlaubt es, den Dialogtitel selbst auszuwählen. Die Standardtitel sind „Öffnen“ bzw. „Speichern unter…“.

    Die Eigenschaft FileName

    Mit dieser Eigenschaft hat man die Möglichkeit, einen Standarddateinamen im Dateidialog vorzubelegen. Nach Beendigung des Dialogs kann über diese Eigenschaft der komplette Dateipfad ermittelt werden.

    Die Eigenschaft FileTitle

    Über diese Eigenschaft steht nach Beendigung des Dialogs der Dateiname ohne Pfad zur Verfügung.

    Die Eigenschaften Filter und FilterIndex

    Über diese Eigenschaft kann man die Auswahlliste für die Dateitypen und somit das Verhalten des Controls in der (gefilterten) Anzeige von Datei beeinflussen.
    Jeder Eintrag in dieser Dateitypenliste ist zweigeteilt. Zum einen wird die Beschreibung angezeigt und zum anderen wird die Filterung der Dateien im Control entsprechend der Dateiendung gesteuert. Alle Einträge in dieser Eigenschaft müssen durch das Pipe-Symbol | (ASCII 124) voneinander getrennt werden.
    Beispiele:

    Beschreibender TeilFiltertypEigenschaftswert
    Textdateien (*.txt)*.txtTextdateien (*.txt)|*.txt
    Grafiken (*.bmp;*.ico)*.bmp;*.icoGrafiken (*.bmp;*.ico)|*.bmp;*.ico


    Stehen mehrere Dateitypen zur Auswahl, so sind diese Dateiendungen jeweils durch ein Semikolon voneinander zu trennen.

    Diese Filter lassen sich auch entsprechend kombinieren:

    Textdateien (*.txt)|*.txt| Grafiken (*.bmp;*.ico)|*.bmp;*.ico

    Die FilterIndex-Eigenschaft wiederum bestimmt, welcher Eintrag in der Dateitypenliste beim Öffnen des Dialogs voreingestellt sein soll. Dabei ist zu beachten, dass der erste Listeneintrag den Index 1 besitzt! Wird der Filter „Textdateien (*.txt)|*.txt| Grafiken (*.bmp;*.ico)|*.bmp;*.ico
    „ mit dem FilterIndex = 2 eingesetzt, so wird der Dialog beim Öffnen Grafiken vom Tap *.bmp bzw. *.ico anzeigen.

    Die Eigenschaft Flags

    Mit dieser Eigenschaft kann das Verhalten des Dialogs beeinflusst werden. Dazu steht eine Reihe von Konstanten zur Verfügung, welche in Kombination miteinander angewendet werden können:

    KonstantennameFlags-WertBeschreibung
    cdlOFNAllowMultiselect&H200 Ermöglicht, dass im Listenfeld Dateiname mehrere Dateien ausgewählt werden. Die FileName-Eigenschaft gibt einen String zurück, der alle ausgewählten Dateinamen enthält (die Namen sind im String durch Leerzeichen voneinander getrennt).
    cdlOFNCreatePrompt&H2000 Fragt den Benutzer, ob eine Datei angelegt werden soll, die noch nicht existiert. Dieses Flag setzt automatisch die Flags cdlOFNPathMustExist und cldOFNFileMustExist.
    cdlOFNExplorer&H80000 Verwendet das dem Explorer ähnliche Dialogfeld zum Öffnen von Dateien.
    cdlOFNExtensionDifferent&H400 Weist darauf hin, dass sich die Dateinamenerweiterung des zurückgegebenen Dateinamens von der in der DefaultExt-Eigenschaft angegebenen Erweiterung unterscheidet. Dieses Flag wird nicht gesetzt, wenn die DefaultExt-Eigenschaft Null enthält, wenn die Erweiterungen übereinstimmen, oder wenn die Datei keine Erweiterung hat. Man kann den Wert dieses Flags überprüfen, nachdem das Dialogfeld geschlossen wurde.
    cdlOFNFileMustExist&H1000 Die Benutzer dürfen nur Dateinamen eingeben, die existieren. Wenn dieses Flag gesetzt ist und der Benutzer gibt einen ungültigen Dateinamen ein, wird eine Warnung angezeigt. Dieses Flag setzt automatisch das Flag cdlOFNPathMustExist.
    cdlOFNHelpButton&H10 Zeigt die Hilfe-Schaltfläche für das Dialogfeld an.
    cdlOFNHideReadOnly&H4 Verbirgt das Kontrollkästchen Mit Schreibschutz öffnen.
    cdlOFNLongNames&H200000 Erlaubt lange Dateinamen.
    cdlOFNNoChangeDir&H8 Zwingt das Dialogfeld, das aktuelle Verzeichnis so zu setzen, wie es beim Öffnen des Dialogfelds gesetzt war.
    cdlOFNNoDereferenceLinks&H100000 Verbietet die Dereferenzierung von Shell-Links (auch als Shortcuts bezeichnet). Standardmäßig bewirkt die Auswahl eines Shell-Links, dass dieser von der Shell dereferenziert wird.
    cdlOFNNoLongNames&H40000 Verbietet lange Dateinamen.
    cdlOFNNoReadOnlyReturn&H8000 Spezifiziert, dass die zurückgegebene Datei das Attribut Read-Only nicht gesetzt hat und sich nicht in einem schreibgeschützten Verzeichnis befindet.
    cdlOFNNoValidate&H100 Erlaubt ungültige Zeichen im zurückgegebenen Dateinamen.
    cdlOFNOverwritePrompt&H2 Bewirkt, dass das Dialogfeld Speichern unter eine Warnung erzeugt, wenn der angegebene Dateiname bereits existiert. (Die Benutzer können dann wählen, ob die Datei überschrieben werden soll.)
    cdlOFNPathMustExist&H800 Die Benutzer dürfen nur gültige Pfade eingeben. Wenn dieses Flag gesetzt ist und die Benutzer einen ungültigen Pfad eingeben, erscheint eine Warnung.
    cdlOFNReadOnly&H1 Markiert das Kontrollkästchen Mit Schreibschutz öffnen, wenn das Dialogfeld erzeugt wird. Dieses Flag gibt außerdem den Status des Kontrollkästchens Mit Schreibschutz öffnen nach dem Schließen des Dialogfelds an.
    cdlOFNShareAware&H4000 Zeigt an, dass mögliche Freigabe-Fehler ignoriert werden.


    Die Verknüfpung von mehreren Flags erfolgt mittels des Or-Operators:

    Flags = cdlOFNAllowMultiselect Or cdlOFNFileMustExist

    Die Eigenschaft InitDir

    Mit dieser Eigenschaft kann man das Standardverzeichnis vorbelegen, den das Control zur Anzeige der Dateien benutzen soll. Ohne diese Vorbelegung wird der gerade aktuelle Ordner benutzt.

    Die Eigenschaft MaxFileSize

    Mit dieser Eigenschaft kann man die maximale Stringgröße für die FileName -Eigenschaft bestimmen. Standardmäßig werden 256 Bytes reserviert, was der maximalen Pfadlänge entspricht. Wenn jedoch das Flag cdlOFNAllowMultiselect gesetzt und entsprechend viele Dateien ausgewählt, so reichen diese 256 Bytes unter Umständen nicht mehr aus. Dieser Wert kann zwischen 1 und 32 KB liegen (32 KB = 32.768 Bytes = 128 Pfadmaximallängen).

    Aufrufbeispiel des Öffnen-Dialogs:

    Code:
    Function Dateiauswahl() As String
     
        On Error GoTo Dlg_Error
        With CommonDialog1
         '// Beim Abbruch Laufzeitfehler erzeugen
            .CancelError = True
         '// Standard-Dialogtitel überschreiben
            .DialogTitle = "Bitte wählen Sie eine Datei aus:"
         '// Auswahlfilter bestimmen
            .Filter = "Alle Dateien (*.*)|*.*|" & _
                      "Microsoft Access Datenbank (*.mdb)|*.mdb|" & _
                      "Webseiten (*.htm;*.html)|*.htm;*.html"
         '// Zweiten Listeneintrag vorbelegen
            .FilterIndex = 2
         '// Flags setzen
            .Flags = cdlOFNAllowMultiselect Or _
                     cdlOFNFileMustExist Or _
                     cdlOFNExplorer
         '// Dilalog aufrufen
            .ShowOpen
         '// Ergebnisse ausgeben
             Dateiauswahl = .FileName
        End With
        Exit Function
     
    Dlg_Error:
        If Err.Number = cdlCancel Then '32755 (&H7FF3)
              MsgBox "Abbruch wurde gewählt!"
        Else: MsgBox "Fehler #" & Err.Number & ": " & Err.Description
        End If
     
    End Function
     
    Sub Beispiel()
     
        Dim sFilepath As String
        sFilepath = Dateiauswahl()
        If Len(sFilepath) Then
            MsgBox "Dateiauswahl: " & sFilepath, vbInformation
        End If
     
    End Sub



    Lösung 2: Nutzung des Win32-API

    Die Lösung mittels Win32-API ähnelt in vielen Dingen der ActiveX-Lösung.

    Statt dem Control wird hier mit einer entsprechenden Struktur gearbeitet, in deren Elemente die verschiedenen Einstellungen vorgenommen werden.

    Type OPENFILENAME
         nStructSize     As Long    Länge der Struktur in Bytes
         hwndOwner       As Long    Windows-Handle des “Besitzerfensters”
         hInstance       As Long    für VB/A uninteressant
         sFilter         As String  s.o. die Eigenschaft Filter
         sCustomFilter   As String  für VB/A uninteressant
         nCustFilterSize As Long    für VB/A uninteressant
         nFilterIndex    As Long    s.o. die Eigenschaft FilterIndex
         sFile           As String  s.o. die Eigenschaft FileName
         nFileSize       As Long    s.o. die Eigenschaft MaxFileSize
         sFileTitle      As String  s.o. die Eigenschaft FileTitle
         nTitleSize      As Long    Länge des Buffers für sFileTitle
         sInitDir        As String  s.o. die Eigenschaft InitDir
         sDlgTitle       As String  s.o. die Eigenschaft DialogTitle
         Flags           As Long    s.o. die Eigenschaft Flags
         nFileOffset     As Integer Offset des ersten Dateinamens bei Mehrfachauswahl
         nFileExt        As Integer Offset des ersten Dateiendung bei Mehrfachauswahl
         sDefFileExt     As String  s.o. die Eigenschaft DefaultExt
         nCustData       As Long    Message für Hook-Funktion des Dialogs
         fnHook          As Long    Funktionsadresse einer Hook-Funktion
         sTemplateName   As String  für VB/A uninteressant
    End Type

    Beispiel für den API-Aufruf:

    Code:
    Const OFN_READONLY           As Long = &H1
    Const OFN_EXPLORER           As Long = &H80000
    Const OFN_LONGNAMES          As Long = &H200000
    Const OFN_CREATEPROMPT       As Long = &H2000
    Const OFN_NODEREFERENCELINKS As Long = &H100000
    Const OFN_OVERWRITEPROMPT    As Long = &H2
    Const OFN_HIDEREADONLY       As Long = &H4
    Const OFS_FILE_OPEN_FLAGS    As Long = OFN_EXPLORER _
                                        Or OFN_LONGNAMES _
                                        Or OFN_CREATEPROMPT _
                                        Or OFN_NODEREFERENCELINKS
    Const OFS_FILE_SAVE_FLAGS    As Long = OFN_EXPLORER _
                                        Or OFN_LONGNAMES _
                                        Or OFN_OVERWRITEPROMPT _
                                        Or OFN_HIDEREADONLY
    Type OPENFILENAME
         nStructSize     As Long
         hwndOwner       As Long
         hInstance       As Long
         sFilter         As String
         sCustomFilter   As String
         nCustFilterSize As Long
         nFilterIndex    As Long
         sFile           As String
         nFileSize       As Long
         sFileTitle      As String
         nTitleSize      As Long
         sInitDir        As String
         sDlgTitle       As String
         Flags           As Long
         nFileOffset     As Integer
         nFileExt        As Integer
         sDefFileExt     As String
         nCustData       As Long
         fnHook          As Long
         sTemplateName   As String
    End Type
     
    Declare Function GetActiveWindow Lib "user32.dll" () As Long
    Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                    "GetOpenFileNameA" _
                    (pOpenfilename As OPENFILENAME) As Long
    Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
                    "GetSaveFileNameA" _
                    (pOpenfilename As OPENFILENAME) As Long
    Declare Function GetShortPathName Lib "kernel32.dll" Alias _
                    "GetShortPathNameA" _
                    (ByVal lpszLongPath As String, _
                     ByVal lpszShortPath As String, _
                     ByVal cchBuffer As Long) As Long
     
    Function Dateiauswahl() As String
     
        Dim sFilter As String
    '// --------------------------------------------------------------------------
    '// Strukturvariable vom Typ OPENFILENAME erzeugen
    '// --------------------------------------------------------------------------
        Dim uOFN As OPENFILENAME
    '// --------------------------------------------------------------------------
    '// Strukturgröße und Elternfenster setzen
    '// --------------------------------------------------------------------------
        uOFN.nStructSize = Len(uOFN)
        uOFN.hwndOwner = GetActiveWindow()
    '// --------------------------------------------------------------------------
    '// Filter setzen und Index auf 2 (Datenbanken) setzen
    '// Format: "Name" \n "Ext." \n "Name" \n "Ext." ... \n\n
    '// --------------------------------------------------------------------------
        sFilter = "Alle Dateien (*.*)" & vbNullChar & "*.*" & vbNullChar & _
                  "MS Access Datenbank (*.mdb)" & vbNullChar & "*.mdb" & vbNullChar & _
                  "Webseiten (*.htm;*.html)" & vbNullChar & "*.htm;*.html"
        sFilter = sFilter & vbNullChar & vbNullChar
     
        uOFN.sFilter = sFilter
        uOFN.nFilterIndex = 2
    '// --------------------------------------------------------------------------
    '// Dialogtitel setzen
    '// --------------------------------------------------------------------------
        uOFN.sDlgTitle = "Bitte wählen Sie eine Datei aus:"
    '// --------------------------------------------------------------------------
    '// Flags setzen
    '// --------------------------------------------------------------------------
        uOFN.Flags = OFS_FILE_OPEN_FLAGS
    '// --------------------------------------------------------------------------
    '// Speicher für sFile und sFileTitle reservieren
    '// --------------------------------------------------------------------------
        uOFN.sFile = Space$(256) & vbNullChar
        uOFN.nFileSize = Len(uOFN.sFile)
        uOFN.sFileTitle = Space$(256) & vbNullChar
        uOFN.nTitleSize = Len(uOFN.sFileTitle)
    '// --------------------------------------------------------------------------
    '// Funktion aufrufen und auswerten
    '// --------------------------------------------------------------------------
        If GetOpenFileName(uOFN) Then
            Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1)
        Else
            MsgBox "Es wurde Abbruch gewählt!", vbInformation
        End If
     
    End Function
     
    Sub Beispiel()
     
        Dim sFilepath As String
        sFilepath = Dateiauswahl()
        If Len(sFilepath) Then
            MsgBox "Dateiauswahl: " & sFilepath, vbInformation
        End If
     
    End Sub



    Neuen Tipp melden Neuen Download melden

    Copyright 2000-2003 Microsys Kramer– Alle Rechte vorbehalten - Der Download von Tipps und Programmen von den Seiten www.access-paradies.de erfolgt auf eigene Gefahr. Microsys Kramer haftet nicht für Schäden, die aus der Installation oder der Nutzung von Tipps oder Software aus dem Download-Bereich erfolgen. Trotz aktueller Virenprüfung ist eine Haftung für Schäden und Beeinträchtigungen durch Computerviren ausgeschlossen. Schadenersatzansprüche, aus welchem Rechtsgrund auch immer, sind ausgeschlossen, wenn Microsys Kramer nicht Vorsatz oder grobe Fahrlässigkeit zu vertreten hat. Dies gilt auch für Ansprüche auf Ersatz von Folgeschäden wie Datenverlust.

     
     
     
     

    Access-Paradies © 1996-2011 Microsys Kramer


    Microsoft, Access, Word, Excel, Outlook, Outlook Express, Visual Basic und Windows sind eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Weiterempfehlung  |   Linken Sie uns  |   Impressum  |   Newsletter  |   Onlineshop