Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1164to1168
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

GetSaveFileName und Typwechsel anders als bei XL

GetSaveFileName und Typwechsel anders als bei XL
norman
Hi alle,
ich habe versucht mit Application.Dialogs(xlDialogSaveAs).Show zu arbeiten, allerdings muss ich noch vor dem Speichern in VBA wieder die Kontrolle übernehmen, was bei diesem Dialog nicht geht.
Daraufhin bin ich auf
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
"GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
umgestiegen, dieser Dialog verhält sich aber leider anders als xlDialogSaveAs, und zwar wenn _
ich den Typ wechsle (z.B. von XLS auf HTML). xlDialogSaveAs verändert sofot auch die Endung des Dateinamens, aus Mappe1.xls wird Mappe1.html. Leider macht das GetSaveFileNameA nicht, was dazu führt, dass die Datei bei mir dann Mappe1.xls.html heißt. Natürlich könnte ich den gegebenen Dateinamen ohne Endung überbegeben, damit das Problem ausbleibt, das gefällt mir aber nicht. Ich hätte lieber das gleiche Verhalten wie bei xlDialogSaveAs. Geht so was?
Vielen Dank und viele Grüße
Norman
Hier noch mein Code:
Private Const FO_MOVE = &H1
Private Const FO_COPY = &H2
Private Const FO_DELETE = &H3
Private Const FO_RENAME = &H4
Private Const FOF_MULTIDESTFILES = &H1
Private Const FOF_CONFIRMMOUSE = &H2
Private Const FOF_SILENT = &H4 ' don't create progress/report
Private Const FOF_RENAMEONCOLLISION = &H8
Private Const FOF_NOCONFIRMATION = &H10 ' Don't prompt the user.
Private Const FOF_WANTMAPPINGHANDLE = &H20 ' Fill in SHFILEOPSTRUCT.hNameMappings
' Must be freed using SHFreeNameMappings
Private Const FOF_ALLOWUNDO = &H40
Private Const FOF_FILESONLY = &H80 ' on *.*, do only files
Private Const FOF_SIMPLEPROGRESS = &H100 ' means don't show names of files
Private Const FOF_NOCONFIRMMKDIR = &H200 ' don't confirm making any needed dirs
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String ' only used if FOF_SIMPLEPROGRESS
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
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 OFN_PATHMUSTEXIST As Long = &H800
Const OFN_ENABLEHOOK As Long = &H20
Const OFN_ENABLESIZING As Long = &H800000
Const OFS_FILE_OPEN_FLAGS As Long = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_CREATEPROMPT _
Or OFN_NODEREFERENCELINKS
Public Const OFS_FILE_SAVE_FLAGS As Long = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_OVERWRITEPROMPT _
Or OFN_HIDEREADONLY
Public Const OFS_FILE_SAVE_FLAGS_NO_PROMPT As Long = OFN_EXPLORER _
Or OFN_LONGNAMES _
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
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const WM_INITDIALOG As Long = &H110
Private Const SW_SHOWNORMAL As Long = 1
Private Declare

Function GetParent Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare 

Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long
Private Declare 

Function MoveWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal bRepaint As Long) As Long
Private Declare 

Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, _
lpRect As RECT) As Long
'defined As Any to support either the
'OSVERSIONINFO or OSVERSIONINFOEX structure
Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As Any) As Long
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(ByRef xlapp As Excel.Application, oldfname As String, ByRef ftype As Long, _
_
ByRef ext As String, strInitDir As String, sFilter As String, Optional flgs As Long =  _
OFS_FILE_OPEN_FLAGS, _
Optional title As String = "Bitte wählen Sie eine Datei aus:") 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 = xlapp.hwnd ' GetActiveWindow()
'// Filter setzen und Index auf 2 (Datenbanken) setzen
'// Format: "Name" \n "Ext." \n "Name" \n "Ext." ... \n\n
sFilter = "Alle Dateien (*.*)" & vbNullChar & "*.*" & vbNullChar & _
"Textdateien (*.txt)" & vbNullChar & "*.txt" & vbNullChar & _
"XLS-Dateien (*.xls)" & vbNullChar & "*.xls"
sFilter = sFilter & vbNullChar & vbNullChar
uOFN.sFilter = sFilter
uOFN.nFilterIndex = 0
'// Dialogtitel setzen
uOFN.sDlgTitle = title
'// Flags setzen
uOFN.Flags = flgs ' Or _
' OFN_ENABLESIZING Or _
' OFN_ENABLEHOOK
'// Speicher für sFile und sFileTitle reservieren
uOFN.sFile = IIf(Len(oldfname) > 0, oldfname & vbNullChar & Space(255 - Len(oldfname)),  _
vbNullChar & Space$(254) & vbNullChar)
uOFN.sInitDir = strInitDir
uOFN.nFileSize = 256 ' Len(uOFN.sFile)
uOFN.sFileTitle = IIf(Len(oldfname) > 0, oldfname & vbNullChar & Space(255 - Len(oldfname)), _
_
vbNullChar & Space$(255) & vbNullChar)
uOFN.nTitleSize = Len(uOFN.sFileTitle)
'    uOFN.fnHook = FARPROC(AddressOf OFNHookProc)
'// Funktion aufrufen und auswerten
If GetSaveFileName(uOFN) Then
Dateiauswahl = Left(uOFN.sFile, InStr(uOFN.sFile, vbNullChar) - 1)
msgbox Dateiauswahl
Else
MsgBox "Es wurde Abbruch gewählt!", vbInformation
End If
End Function

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
die Kontrolle übernehmen
19.07.2010 23:41:46
Uduuh
Hallo,
was bei diesem Dialog nicht geht

in wie fern nicht?
Gruß aus’m Pott
Udo

AW: die Kontrolle übernehmen
20.07.2010 00:13:03
norman
Hmmmm, ich dachte dass xlDialogSaveAs automatisch speichert, ohne dass ich dann selbständig modifikationen vornehmen und dann SaveAs aufrufen kann. Oder liege ich da falsch?
Gruß
Norman
Oder liege ich da falsch?
20.07.2010 00:26:58
Uduuh
Hallo,
ja.
Die Methode ermittelt nur den Namen, speichert aber nicht. Lies mal die Hilfe.
GetSaveAsFilename-Methode
Zeigt das Standarddialogfeld Speichern unter an und bekommt einen Dateinamen vom Benutzer, ohne jedoch irgendwelche Dateien zu speichern.

Gruß aus’m Pott
Udo

Anzeige
AW: Oder liege ich da falsch?
20.07.2010 23:32:27
norman
Hm, Mist, dann bin ich doof. Habe mir das noch mal angeschaut, Du hast recht. Allerdings habe ich das Problem, dass ich bei HTML nicht die gesetzten Parameter auslesen kann (Tabelle oder gesamte Arbeitsmappe etc.). Deshalb habe ich mich auch für die Alternative entschieden.
Gibts dazu eine Lösung? Inzwischen habe ich implementiert, dass die Endung einfach nicht mit angezeigt wird. Das finde ich zwar nach wie vor nicht so toll, aber es geht halt. Kann ich irgendwie das Verhalten die Excel-Dialogs (siehe ursprüngliche Anfrage) "nachbauen"?
Bin dankbar für Vorschläge
Viele Grüße
Norman
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige