На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! `
Не забудьте заглянуть в VB6 FAQ, так как большая часть VB-примеров актуальна и для VBA-раздела ;)
Модераторы: Old Bat, MIF
  
    > Возможности по настройке диалоговых окон
      EXCEL

      Существующие методы GetOpenFileName и GetSaveAsFileName предоставляют относительно широкие возможности по настройке диалоговых окон:
      Задать имя файла по умолчанию(InitialFileName), определить список фильтров(FileFilter), задать фильтр по умолчанию (FilterIndex), изменить заголовок диалогового окна (Title), задать множественный выбор файлов (MultiSelect )

      WORD97/2000

      Свойство Dialogs не предоставляет того набора настроек, который возможен при помощи вышеописанных методов EXCEL, хотя, имя файла по умолчанию указать все-таки можно:
      ExpandedWrap disabled
        With Dialogs(wdDialogFileOpen)
            .Name = "newname"
            .Show
        End With

      ACCESS97/2000

      Стандартных методов отображения диалоговых окон открытия/сохранения документа не обнаружил

      VISIO

      Стандартных методов отображения диалоговых окон открытия/сохранения документа не обнаружил

      WORD/EXCEL/ACCESS/VISIO 2002 (XP)

      Для работы класса в ACCESS/VISIO не забудьте подключить mso.dll

      Пример вызова диалогового окна SaveAs для Access:
      ExpandedWrap disabled
        Set dlgSaveAs = Application.FileDialog(2)


      B OfficeXP появился класс FileDialog, имеющий в своем арсенале достаточно обширный набор свойств - кроме вышеописанных появились:
      DialogType (тип окна->сохранение, открытие, показ папок, файлов)
      InitialView (вид окна->список, иконки, таблица, предпросмотр)
      ButtonName (изменение стандартной надписи кнопки)
      ExpandedWrap disabled
        Dim FD As FileDialog
        'определяем внешний вид диалогового окна
        Set FD = Application.FileDialog(msoFileDialogOpen)
        'или используем следующий синтаксис для выбора ПАПКИ
        'Set FD=Application.FileDialog(msoFileDialogFolderPicker)
        FD.Title = " Загрузка некоего документа Ж:)"
        FD.Filters.Add "Все файлы", "*.*"
        FD.ButtonName = "Загрузить!"
        FD.AllowMultiSelect = False
        'если что-то выбрано
        If FD.Show = -1 Then
         'заменяем текущий текст выбранным доком
         ActiveDocument.Content.InsertFile FD.SelectedItems(1)
        End If

      ИСПОЛЬЗОВАНИЕ МЕТОДОВ ИЗ COMDLG32.DLL и SHELL32.DLL

      Измененный под VBA пример использования API-функции
      GetOpenFileName из API-GUIDE 3.7 :
      ExpandedWrap disabled
        Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (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
         
        Private Sub Form_Initialize()
            'KPD-Team 1998
            'URL: http://www.allapi.net/
            'E-Mail: KPDTeam@Allapi.net
            Dim OFName As OPENFILENAME
            OFName.lStructSize = Len(OFName)
            'Select a filter
            OFName.lpstrFilter = "Text Files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)
            'create a buffer for the file
            OFName.lpstrFile = Space$(254)
            'set the maximum length of a returned file
            OFName.nMaxFile = 255
            'Create a buffer for the file title
            OFName.lpstrFileTitle = Space$(254)
            'Set the maximum length of a returned file title
            OFName.nMaxFileTitle = 255
            'Set the initial directory
            OFName.lpstrInitialDir = "C:\"
            'Set the title
            OFName.lpstrTitle = "Open File - KPD-Team 1998"
            'No flags
            OFName.flags = 0
         
            'Show the 'Open File'-dialog
            If GetOpenFileName(OFName) Then
                MsgBox "File to Open: " + Trim$(OFName.lpstrFile)
            Else
                MsgBox "Cancel was pressed"
            End If
        End Sub

      Так же есть замечательный класс CommonDlg (см. прикрепленный архив) от Access 2002 Desktop Developer's Handbook
      Кроме настройки диалога открытия/сохранения файлов, предоставляет возможность выбора шрифта и цвета
      Пример использования:
      ExpandedWrap disabled
        Dim Dlg As CommonDlg
         
        Set Dlg= New CommonDlg
        Dlg.DialogTitle = "Сохранение документа"
         
        Dlg.InitDir = Options.DefaultFilePath(wdDocumentsPath)
         
        Dlg.Filter = "MS Word (*.doc)|*.doc|RichTextFormat (*.rtf)|*.rtf|" & _
        "Текст(*.txt)|*.txt|Гипертекст (*.html)|*.htm*|Текст DOS Dos (*.txt)|*.txt"
         
        Dlg.ShowSave
         
        'так же доступны методы:
        'открытие док
        ' Dlg.ShowOpen
        'выбор фонта
        ' Dlg.ShowFont
        'выбор цвета
        ' Dlg.ShowColor


      Упрощенный вариант – используем WSH

      Используем метод BrowseForFolder объекта Application:
      ExpandedWrap disabled
        Set wshell = CreateObject("Shell.Application")
        'игнорируем ошибку, если нажата Cancel
        On Error Resume Next
        Set iPath = wshell.BrowseForFolder(&H0, "Выберите папку, в которой находятся результаты исследований:", &H1, "c:\Users")
        If Not iPath Is Nothing Then
          FolderPath = iPath.Self.Path 'вариант для WINNT
         'FolderPath = iPath.Items.Item.Path 'универсальный вариант для WIN9х/NT
        Else
        'нажата Cancel
        Endif

      Краткое описание параметров функции BrowseForFolder

      Первый параметр – передает диалоговому окну дескриптор окна, всегда равен 0
      Второй параметр – строка, выводимая в диалоговом окне под заголовком
      Третий параметр – 32-разрядный флаг, задаем свойства диалогового окна
      Четвертый параметр (опционально) – папка по умолчанию. Здесь вы можете указать как одну из констант (см. ниже), так и путь к желаемой папке (см. пример выше), в этом случае указанная папка будет являться корневой в отображаемом диалоговом окне.

      Константы для третьего параметра

      &Н0001 - Можно выбирать лишь папки файловой системы. Если этот разряд установлен, то при выборе папки, не принадлежащей к файловой системе (например, Control Panel), кнопка OK будет недоступна.
      &Н0002 - Во время поиска компьютера пользователю запрещено просматривать папки ниже этого домена в пределах сети.
      &Н0004 - Под диалоговым окном появляется область для вывода сведений о состоянии (однако я не смог найти способ вывода состояния).
      &Н0008 - Возвращает только каталоги, расположенные в иерархии файловой системы выше данного.
      &Н0010 - Выводит в диалоговом окне поле ввода, в котором пользователь может задать имя элемента.
      &Н0020 - Проверяет имя, набранное в поле ввода.
      &Н1000 - Позволяет пользователю просматривать сетевую ветвь пространства имен оболочки в поисках компьютеров.
      &Н2000 - Позволяет пользователю просматривать сетевую ветвь пространства имен оболочки в поисках принтеров.
      &Н4000 - Позволяет искать любые элементы.

      Константы для четвертого параметра

      0 - Корневым каталогом является (виртуальная) папка Desktop. При использовании этой константы с &H0001 для третьего параметра возникают проблемы с кнопкой ОК.
      1 - Корневым каталогом является Internet Explorer.
      2 - Корневым каталогом является папка Programs из меню Start.
      3 - Корневым каталогом является папка Control Panel. У третьего параметра должно быть значение &Н4000 (поиск любых элементов).
      4 - Корневым каталогом является папка Printers. У третьего параметра
      должно быть значение &Н4000 (поиск любых элементов).
      5 - Корневым каталогом является папка Documents из меню Start.
      6 - Корневым каталогом является папка Favorites из меню Start.
      7 - Корневым каталогом является папка Startup из меню Start. У третьего параметра должно быть значение &Н4000 (поиск любых элементов).
      8 - Корневым каталогом является папка Recent. У третьего параметра должно быть значение &Н4000 (поиск любых элементов).
      9 - Корневым каталогом является папка SendTo. У третьего параметра должно быть значение &Н4000 (поиск любых элементов).
      10 - Корневым каталогом является папка Recycle Bin. У третьего параметра должно быть значение &Н4000 (поиск любых элементов).
      11 - Корневым каталогом является папка меню Start.
      16 - Корневым каталогом является (физическая) папка Desktop.
      17 - Корневым каталогом является папка My Computer.


      Сообщение отредактировано: Old Bat -

      Прикреплённый файлПрикреплённый файлdlg_code.zip (93.42 Кбайт, скачиваний: 1037)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0234 ]   [ 18 queries used ]   [ Generated: 28.04.24, 04:27 GMT ]