Dateierweiterung in GetSafeFileName

Hallo zusammen,

ich habe einen Speichern unter-Dialog in Access eingefügt. Das Fenster öffnet sich auch, das Problem ist nur, dass in der Variablen „OPENFILE.lpstrFile“ leider nur der Pfad+Dateiname ohne Dateierweiterung steht, z.B. C:\test (ohne .txt)
Ich habe dann versucht, mit Hilfe eines Strings die Erweiterung anzuhängen, ging aber leider nicht. Wer kann mir helfen, ist sehr dringend ! Wäre echt super… den Code hab ich unten angefügt !

Vielen Dank für alle Tips und Hilfestellungen, Christoph
___________________________________________________________________

Option Compare Database
Option Explicit

'Anfang des Deklartionsblocks

Type GETFILENAME
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 Long
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

Public Declare Function apiGetSaveFileName Lib „comdlg32.dll“ _
Alias „GetSaveFileNameA“ (pOpenfilename As GETFILENAME) As Long
______________________________________________________________________

Private Sub CmdSave_Click()

Dim OpenFile As GETFILENAME
Dim lReturn As Long
Dim sFilter As String

On Error GoTo HandleErr

OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = Me.Hwnd
sFilter = „Textdateien (*.txt)“ & Chr(0) & „*.txt“ & Chr(0)
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
OpenFile.lpstrInitialDir = „C:“
OpenFile.lpstrTitle = „‚Speichern unter‘-Dialog der Common Dialog API“
OpenFile.flags = 0
lReturn = apiGetSaveFileName(OpenFile)

If lReturn = 0 Then
MsgBox „Der Anwender hat die Aktion abgebrochen.“
Else
MsgBox "Der Anwender hat den folgenden Pfad und Datei angegeben: " _
& Trim(OpenFile.lpstrFile)
End If

ExitHere:
Exit Sub

HandleErr:
Select Case Err.Number
Case Else
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbCritical, „Modul1.CmdSave_Click“
End Select

End Sub

Hallo Christoph

das Problem ist nur, dass in der Variablen „OPENFILE.lpstrFile“
leider nur der Pfad+Dateiname ohne Dateierweiterung steht

Ja, in „OPENFILE.lpstrFile“ steht genau das, was der Benutzer eingibt. Gibt er also einen Dateinamen ohne Erweiterung an, bekommst du den Dateinamen auch ohne Erweiterung zurück. Gibt er einen Dateinamen mit Erweiterung an, bekommst du ihn mit Erweiterung. Mit anderen Worten: Der Dialog ergänzt die Dateierweiterung nicht. Und selbst wenn du als Filter z.B. „*.txt“ angibst, kannst du nicht verhindern, dass der Benutzer als Dateinamen dann z.B. „BlaBla.XLS“ eingibt. Du musst den korrekten Dateinamen also nach dem Aufruf selber „zusammenbasteln“.

Ich habe dann versucht, mit Hilfe eines Strings die
Erweiterung anzuhängen, ging aber leider nicht.

Ja, denn „Trim“ entfernt keine „Null-Character“. Das könntest du z.B. mit dieser Funktion machen:

Function TrimNullChar(strText As String) As String
Dim iPos As Integer
iPos = InStr(strText, vbNullChar)
If iPos \> 0 Then
 TrimNullChar = Left(strText, iPos - 1)
Else
 TrimNullChar = strText
End If
End Function

Wer kann mir helfen, ist sehr dringend !

Vielleicht hilft’s dir auch heute noch…

Gruss
Peter

Hallo Peter,

vielen Dank für Deine Hilfe. Ich habe in der Zwischenzeit zwar eine Funktion gefunden, mit der es funktioniert, aber jetzt weiß ich für das nächste Mal bescheid!

Gruß Christoph

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]