Проблема с функцией GetOpenFileName

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Nata
Сообщения: 1
Зарегистрирован: 22 ноя 2005, 20:45

Функция GetOpenFileName почему то не работает на машинах с Windows XP Professionsonal. Причем на машинах с Windows XP Home Edition эта же функция работает нормально. В чем может быть причина?
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Попробуйте этот вариант, у меня под XP прекрасно работает в Excel-е
может что-то не то с файлом 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
Ответить