Страница: 1 |
Как вызвать диалоговое окно OpenFileDialog в VB Excel?
Или CommonDialog1.Action=1 Эээ, нет. Конечно, можно использовать Common Dialog Control, но очень не рекомендую. Возможны глюки, если запускать макрос на других машинах. Или API нужно использовать или проще всего: Filter = "Файлы Excel (*.xls),*.xls" Caption As String = "Открытие книги" sFullFileName = Application.GetOpenFilename(Filter, 1, Caption) Круто. А для Worda не знаешь ? Dialogs(wdDialogFileOpen).Show Dialogs(wdDialogFileOpen).Show Уж не знаю хороша ли такая сильная оптимизация. Хотя наверное по-барабану. VBA-программист всё равно работает с документами, а не с файлами. Насчёт API. Если не жалко оставь здесь. Я думаю это подойдёт и VB-программистам. Если не можешь - cyraxua@hotmail.com >VBA-программист всё равно работает с документами, а не с файлами. Вопрос довольно спорный. Чаше всего данные для документов и отчетов приходится брать именно из внешних файлов разнообразнейших форматов. Мне, но крайней мере. API-код 'Процедуры использования напрямую без comdlg32.ocx 'Declaration Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ ' Константы для управления флагами окна "Открыть/Сохранить файл" ' Описатель данных для работы с окном "Открыть/Сохранить файл" '************************************ 'Сама процедура Public Function FileOpenSave( _ ' начальный каталог If OpenFile Then ' открыть файл If fResult Then ' Нажата кнопка "Open/Save" '***************************** 'Процедура из рабочего модуля (вырвал из жизни, чуть изменив, т.к. там были мои константы и переменные, поэтому могут быть непонятки. Но я думаю, что в основном понятно, что и для чего) Public Function GetFileName() If ИмяФайла = "" Then Exit Function Ok, спасибо. А то я в последнее время потерял доверие ко всяким контролам. Так если на VB3 все VBXы можно было просто положить в каталог программы (хотя установка тоже существовала), то здесь нужна регистрация. А при программировании ещё и лицензия. Особенно хорошо смотреть на лицо какого-нибудь заказчика, когда ставишь программу на его глючные (конечно же самые работоспособные машины в городе), а она требует то переустановку OLE, то другие версие компонентов, а то и вообще не хочет ничего ставить без объявления причин. Думаю большинство разработчиков на VB сталкивались с этой проблемой (за исключением разве что когда всё распространение заканчивалось машиной пользователя). Страница: 1 |
Вопрос: OpenFileDialog
Добавлено: 07.10.02 13:39
Автор вопроса: sterling
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #1
Добавлено: 07.10.02 17:57
да вероятно так же как и в VB Dialog1.Showopen
Номер ответа: 2
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #2
Добавлено: 07.10.02 21:43
Номер ответа: 3
Автор ответа:
Petrovich
Вопросов: 9
Ответов: 84
Профиль | | #3
Добавлено: 08.10.02 09:21
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 09.10.02 21:26
Номер ответа: 5
Автор ответа:
Petrovich
Вопросов: 9
Ответов: 84
Профиль | | #5
Добавлено: 10.10.02 08:36
Это, конечно, не так круто, имя файла не возвращается, но документ открыть можно. Я для Ворда API использую. Нужно? - отмылю.
Номер ответа: 6
Автор ответа:
Petrovich
Вопросов: 9
Ответов: 84
Профиль | | #6
Добавлено: 10.10.02 08:37
Это, конечно, не так круто, имя файла не возвращается, но документ открыть можно. Я для Ворда API использую. Нужно? - отмылю.
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 10.10.02 19:27
Номер ответа: 8
Автор ответа:
Petrovich
Вопросов: 9
Ответов: 84
Профиль | | #8
Добавлено: 11.10.02 08:56
'функций библиотеки comdlg32.dll (с благодарностью А.А.Колесову)
Alias "GetOpenFileNameA" (ofn As OPENFILENAME) As Boolean
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" (ofn As OPENFILENAME) As Boolean
Public Const OFN_READONLY As Long = &H1
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
stFilter As String
stCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
strFile As String
nMaxFile As Long
stFileTitle As String
nMaxFileTitle As Long
stInitialDir As String
strTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
stDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Optional ByVal OpenFile As Boolean = True, _
Optional ByRef Flags As Long = 0&, _
Optional ByVal InitialDir As Variant, _
Optional ByVal Filter As String = vbNullString, _
Optional ByVal FilterIndex As Long = 1, _
Optional ByVal DefaultExt As String = vbNullString, _
Optional ByVal FileName As String = vbNullString, _
Optional ByVal DialogTitle As String = vbNullString, _
Optional ByVal hwnd As Long = -1) _
As String
'
' Процедура обращения к
' диалоговому окну "Открыть/Закрыть файл"
' OpenFile = True - ОТКРЫТЬ (по умолчанию)
' = False - ЗАКРЫТЬ
'
Dim ofn As OPENFILENAME ' структура для обращения
' к DLL-функции
Dim stFileName As String
Dim stFileTitle As String
Dim fResult As Boolean
If IsMissing(InitialDir) Then InitialDir = CurDir
If (hwnd = -1) Then hwnd = 0 ' установка описателя
' Подготовка строковых переменных
stFileName = Left$(FileName & String$(256, vbNullChar), 256)
stFileTitle = String$(256, vbNullChar)
' формирование данных для обращения к окну
With ofn
.lStructSize = Len(ofn)
.hwndOwner = hwnd
.stFilter = Filter
.nFilterIndex = FilterIndex
.strFile = stFileName
.nMaxFile = Len(stFileName)
.stFileTitle = stFileTitle
.nMaxFileTitle = Len(stFileTitle)
.strTitle = DialogTitle
.Flags = Flags
.stDefExt = DefaultExt
.stInitialDir = InitialDir
.hInstance = 0
.stCustomFilter = String$(255, vbNullChar)
.nMaxCustFilter = 255
.lpfnHook = 0
End With
fResult = GetOpenFileName(ofn)
Else 'сохранить файл
fResult = GetSaveFileName(ofn)
End If
Flags = ofn.Flags ' флаги
' имя файла
FileOpenSave = Left$(ofn.strFile, _
InStr(ofn.strFile, vbNullChar) - 1)
Else: FileOpenSave = "" ' нажата Cancel
End If
End Function
' обращение к окнам "Open/Save File" напрямую через DLL
'=============================
Dim bOpenFile As Boolean ' тип операции
' TRUE (открыть)/FALSE (закрыть)
Dim Filter$, Flags&
Dim FileName$, InitDir$, Title$
InitDir$ = DEFAULT_PATH
Title$ = "Открытие файла с ..."
Filter$ = "Файлы с ...() " & Chr(0) & DEF_MASK & Chr(0) & "Все файлы (*.*)" & Chr(0) & "*.*"
bOpenFile = True
ИмяФайла$ = FileOpenSave( _
bOpenFile, , InitDir, Filter, , ".txt", , Title$)
End Function
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 11.10.02 21:06