Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: OpenFileDialog Добавлено: 07.10.02 13:39  

Автор вопроса:  sterling

Как вызвать диалоговое окно OpenFileDialog в VB Excel?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #1 Добавлено: 07.10.02 17:57
да вероятно так же как и в VB Dialog1.Showopen

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 07.10.02 21:43

Или CommonDialog1.Action=1

Ответить

Номер ответа: 3
Автор ответа:
 Petrovich



Вопросов: 9
Ответов: 84
 Профиль | | #3 Добавлено: 08.10.02 09:21

Эээ, нет. Конечно, можно использовать Common Dialog Control, но очень не рекомендую. Возможны глюки, если запускать макрос на других машинах. Или API нужно использовать или проще всего:

Filter = "Файлы Excel (*.xls),*.xls"

Caption As String = "Открытие книги"

sFullFileName = Application.GetOpenFilename(Filter, 1, Caption)

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 09.10.02 21:26

Круто.

А для Worda не знаешь ?

Ответить

Номер ответа: 5
Автор ответа:
 Petrovich



Вопросов: 9
Ответов: 84
 Профиль | | #5 Добавлено: 10.10.02 08:36

Dialogs(wdDialogFileOpen).Show
Это, конечно, не так круто, имя файла не возвращается, но документ открыть можно. Я для Ворда API использую. Нужно? - отмылю.

Ответить

Номер ответа: 6
Автор ответа:
 Petrovich



Вопросов: 9
Ответов: 84
 Профиль | | #6 Добавлено: 10.10.02 08:37

Dialogs(wdDialogFileOpen).Show
Это, конечно, не так круто, имя файла не возвращается, но документ открыть можно. Я для Ворда API использую. Нужно? - отмылю.

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 10.10.02 19:27

Уж не знаю хороша ли такая сильная оптимизация. Хотя наверное по-барабану. VBA-программист всё равно работает с документами, а не с файлами.

Насчёт API.

Если не жалко оставь здесь. Я думаю это подойдёт и VB-программистам. Если не можешь - cyraxua@hotmail.com

 

Ответить

Номер ответа: 8
Автор ответа:
 Petrovich



Вопросов: 9
Ответов: 84
 Профиль | | #8 Добавлено: 11.10.02 08:56

>VBA-программист всё равно работает с документами, а не с файлами.

Вопрос довольно спорный. Чаше всего данные для документов и отчетов приходится брать именно из внешних файлов разнообразнейших форматов. Мне, но крайней мере.

API-код

'Процедуры использования напрямую без comdlg32.ocx
'функций библиотеки comdlg32.dll (с благодарностью А.А.Колесову)

'Declaration

Private Declare Function GetOpenFileName Lib "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

'************************************

'Сама процедура

Public Function FileOpenSave( _
    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

    If OpenFile Then  ' открыть файл
        fResult = GetOpenFileName(ofn)
    Else  'сохранить файл
        fResult = GetSaveFileName(ofn)
    End If

    If fResult Then  ' Нажата кнопка "Open/Save"
        Flags = ofn.Flags  ' флаги
        ' имя файла
        FileOpenSave = Left$(ofn.strFile, _
            InStr(ofn.strFile, vbNullChar) - 1)
    Else: FileOpenSave = "" ' нажата Cancel
    End If
End Function

'*****************************

'Процедура из рабочего модуля (вырвал из жизни, чуть изменив, т.к. там были мои константы и переменные, поэтому могут быть непонятки. Но я думаю, что в основном понятно, что и для чего)

Public Function GetFileName()
  ' обращение к окнам "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$)

    If ИмяФайла = "" Then Exit Function
End Function

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 11.10.02 21:06

Ok, спасибо.

А то я в последнее время потерял доверие ко всяким контролам.

Так если на VB3 все VBXы можно было просто положить в каталог программы (хотя установка тоже существовала), то здесь нужна регистрация. А при программировании ещё и лицензия.

Особенно хорошо смотреть на лицо какого-нибудь заказчика, когда ставишь программу на его глючные (конечно же самые работоспособные машины в городе), а она требует то переустановку OLE, то другие версие компонентов, а то и вообще не хочет ничего ставить без объявления причин.

Думаю большинство разработчиков на VB сталкивались с этой проблемой (за исключением разве что когда всё распространение заканчивалось машиной пользователя).

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам