Common Dialog Control

ericgeil

Registered User.
Local time
Today, 14:06
Joined
Jun 6, 2000
Messages
14
This one should be easy.

How do you use a common dialog control as an open/save as dialog? In VB6 I would just use the .showopen method, but this method is not available in VBA.

Thanks
 
Poor you! It's quite a complicated task!

I use common dialog like this: (comments in German - just leave them out)


Option Compare Database
Option Explicit

Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_READONLY = &H1
Public Const OFN_HIDEREADONLY = &H4

Type TOpenFileName
lStructSize As Long ' Länge des Datentyps OPENFILENAME
hwndOwner As Long ' Fenster, unter dem Dialog erscheint
hInstance As Long ' nicht verwendet
lpstrFilter As String ' Zeichenkette von Anzeigenfiltern im Dialog
lpstrCustomFilter As String ' nicht verwendet
nMaxCustFilter As Long ' nicht verwendet
nFilterIndex As Long ' 1 zum Benutzen des ersten Filters, 2 zum zweiten usw.
lpstrFile As String ' String, der ausgewählte Datei bekommt
nMaxFile As Long ' Länge von lpstrFile
lpstrFileTitle As String ' Dateiname ohne Pfad (kann auch mit VBA ermittelt werden, also weglassen)
nMaxFileTitle As Long ' nicht verwendet
lpstrInitialDir As String ' Ordner, in dem Dialog sich zuerst befinden soll
lpstrTitle As String ' Titel des eigentlichen Dialogfensters
Flags As Long ' verschiedene Optionen, die durch Konstanten eingestellt werden
nFileOffset As Integer ' nicht verwendet
nFileExtension As Integer ' nicht verwendet
lpstrDefExt As String ' Erweiterung, die genommen wird, wenn keine eingegeben wurde
lCustData As Long ' nicht verwendet
lpfnHook As Long ' nicht verwendet
lpTemplateName As Long ' nicht verwendet
End Type

Declare Function APT_GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As TOpenFileName) As Long
Declare Function APT_GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As TOpenFileName) As Long

Public cnstNull As String * 1


And then:


Public Function XGetOpenFile(Optional Titel, Optional Filter, Optional Flags, Optional DefExtension, Optional AktDir)

Dim strDateiName As String, strDlgTitel As String, lFlags As Long
Dim strFilter As String, strDefExtension As String
Dim strAktDir As String, OpenDlg As TOpenFileName

cnstNull = Chr$(0)
strDateiName = String$(512, 0) ' der String sollte lang genug für einen Win-95 Pfad sein
If IsMissing(Titel) Then
strDlgTitel = "Datei öffnen" & cnstNull ' Standardtitel verwenden
Else
strDlgTitel = Titel & cnstNull
End If

If IsMissing(Filter) Then
strFilter = "Alle Dateien" & cnstNull & "*.*" & cnstNull & cnstNull ' alle Dateien anzeigen
Else
strFilter = Filter
End If

If IsMissing(Flags) Then
lFlags = OFN_FILEMUSTEXIST Or OFN_READONLY
Else
lFlags = Flags
End If

If IsMissing(DefExtension) Then
strDefExtension = cnstNull ' keine Default-Erweiterung
Else
strDefExtension = DefExtension & cnstNull
End If

If IsMissing(AktDir) Then
strAktDir = CurDir$ & cnstNull ' aktuelles Verzeichnis ermitteln
Else
strAktDir = AktDir & cnstNull
End If

With OpenDlg
.lStructSize = Len(OpenDlg)
.hwndOwner = Application.hWndAccessApp
.lpstrFilter = strFilter
.nFilterIndex = 1
.lpstrFile = strDateiName
.nMaxFile = Len(strDateiName)
.lpstrInitialDir = strAktDir
.lpstrTitle = strDlgTitel
.Flags = lFlags
.lpstrDefExt = strDefExtension

If APT_GetOpenFileName(OpenDlg) <> 0 Then
XGetOpenFile = Left$(.lpstrFile, InStr(.lpstrFile, cnstNull) - 1)
Else
XGetOpenFile = ""
End If
End With
End Function


...a lot to do...
 
The selections may not appear in the parameter info, but I have just checked and if you type them as needed they do still work.
 

Users who are viewing this thread

Back
Top Bottom