Проблема с функцией GetOpenFileName
Модератор: Naeel Maqsudov
Функция GetOpenFileName почему то не работает на машинах с Windows XP Professionsonal. Причем на машинах с Windows XP Home Edition эта же функция работает нормально. В чем может быть причина?
Попробуйте этот вариант, у меня под XP прекрасно работает в Excel-е
может что-то не то с файлом C:\WINDOWS\system32\comdlg32.dll на ваших машинах.
может что-то не то с файлом C:\WINDOWS\system32\comdlg32.dll на ваших машинах.
Код: Выделить всё
'Вызывает диалоговое окно выбора файла для открытия
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
'Структура
Private 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
'Функция вызывает стандартное диалоговое окно на открытие файла _
strFilter - строка списка расширений
Public Function OpenDlg(strFilter As String, Optional iSelIndex As Integer = 1) As String
On Error GoTo ErHand
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = 0
OpenFile.hInstance = 0
sFilter = strFilter
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
'OpenFile.lpstrInitialDir = "C:\"
OpenFile.lpstrTitle = "Открыть"
OpenFile.flags = 0
'Показать диалог
lReturn = GetOpenFileName(OpenFile)
If lReturn <> 0 Then
OpenDlg = OpenFile.lpstrFile
iSelIndex = OpenFile.nFilterIndex
End If
Exit Function
ErHand:
MsgBox "Невозможно открыть файл!", vbCritical + vbOKOnly, "Ошибка"
End Function
'Функция вызывает стандартное диалоговое окно на сохранение файла _
strFilter - строка списка расширений
Public Function SaveDlg(strFilter) As String
On Error GoTo ErHand
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = 0
OpenFile.hInstance = 0
sFilter = strFilter
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
'OpenFile.lpstrInitialDir = "C:\"
OpenFile.lpstrTitle = "Сохранить"
OpenFile.flags = 0
'Показать диалог
lReturn = GetSaveFileName(OpenFile)
If lReturn <> 0 Then
SaveDlg = OpenFile.lpstrFile
End If
Exit Function
ErHand:
MsgBox "Невозможно открыть файл!", vbCritical + vbOKOnly, "Ошибка"
End Function
Private Sub CommandButton1_Click()
a = OpenDlg("")
End Sub