Перейти к содержимому

VBA Excel. Стандартный диалог выбора файлов Application.GetOpenFilename

Выбор файлов в VBA Excel. Стандартный диалог Application.GetOpenFilename. Стартовая папка диалога выбора файлов.

Открытие диалога выбора файлов

Открытие диалога для выбора любого файла и записи его полного имени в ячейку «A1»:

Private Sub CommandButton1_Click()
  Range("A1") = Application.GetOpenFilename
End Sub

В процессе выполнения этого кода VBA Excel открывается диалог с заголовком по умолчанию «Открытие файла» и возможностью выбора любого файла. При нажатии на кнопку «Открытие» полное имя выбранного файла запишется в ячейку «A1». При нажатии на кнопку «Отмена» или кнопку закрытия формы в ячейку «A1» запишется строка «Ложь».

Открытие диалога с заголовком «Выбор файла»:

Private Sub CommandButton1_Click()
  Range("A1") = Application.GetOpenFilename (, , "Выбор файла")
End Sub

Открытие диалога выбора файлов с указанием одного фильтра:

Private Sub CommandButton1_Click()
  Range("A1") = Application.GetOpenFilename ("Файлы Excel 97-2003,*.xls", , "Выбор файла")
End Sub

Фильтр в этом коде VBA Excel представляет из себя пару: наименование фильтра и строка из знака подстановки «*» с расширением отбираемых файлов, разделенных «,». В данном случае в открытом диалоге будут видны файлы с расширением «.xls». Таких пар может быть несколько, как в следующем примере.

Открытие диалога выбора файлов с указанием трех фильтров файлов:

Private Sub CommandButton1_Click()
  Range("A1") = Application.GetOpenFilename _
  ("Файлы Excel 97-2003,*.xls,Текстовые файлы,*.txt,Рисунки,*.jpg", , "Выбор файла")
End Sub

Выбрать один из фильтров можно из раскрывающегося списка диалога выбора файлов «Тип файлов».

Для справки:

Application.GetOpenFilename («Фильтры», номер, «Заголовок диалога»)

Аргумент номер - это номер по порядку фильтра в списке, отображаемого по умолчанию. Если номер отсутствует или превышает количество фильтров, то по умолчанию отображается первый в списке.

Стартовая папка диалога выбора файлов

При открытии стандартного диалога выбора файлов «Application.GetOpenFilename» по умолчанию, как стартовая, выбирается папка «Мои документы» в Windows XP, «Документы» в Windows 8, но, при желании, можно задать, как стартовую, и любую другую папку.

Для этого можно воспользоваться операторами ChDrive (смена текущего диска) и ChDir (смена текущего каталога). По умолчанию текущим является диск «С» в Windows XP, поэтому, если ваша папка находится на этом диске, то ChDrive можно пропустить.

Пример 1

Проверяем, какая папка является стартовой по умолчанию. При вызове процедуры из первого примера диалог откроется именно на этой папке. Если выбрать файл, в ячейку «A1» запишется полный путь к нему, а при отмене выбора, запишется «Ложь».

Private Sub CommandButton1_Click()
  Range("A1") = Application.GetOpenFilename
End Sub

Пример 2

В этом примере кода VBA стартовой назначается папка D:\Новая папка. Если пропустить оператор ChDrive "D", то по умолчанию стартовой все-равно останется папка «Мои документы».

Private Sub CommandButton1_Click()
 'Смена текущего диска:
  ChDrive "D"
 'Смена текущего каталога:
  ChDir "D:\Новая папка"
  Range("A1") = Application.GetOpenFilename
End Sub

Пример 3

Здесь стартовой назначается папка, в которой расположен исходный файл Excel с кодом.

Private Sub CommandButton1_Click()
 'Смена текущего диска:
  ChDrive Left(ThisWorkbook.Path, 1)
 'Смена текущего каталога:
  ChDir ThisWorkbook.Path
  Range("A1") = Application.GetOpenFilename
End Sub 

Имя диска может быть любым, в зависимости от имеющегося на вашем компьютере.

VBA Excel. Стандартный диалог выбора файлов Application.GetOpenFilename: 4 комментария

  1. 0mega

    есть книга с макросами
    Макрос_1
    Макрос_2
    Макрос_n
    в каждом из этих макросов есть одинаковый код (напр Range("D2:F8"). Clear )

    Естественно здесь просится еще один Clear_макрос

    и теперь пусть каждый Макрос_n запускает Clear_макрос (Run Clear_макрос )
    Какой код надо прописать чтобы машина прервала выполнение Макрос_n, перешла к Clear_макрос, и по окончанию опять вернулась и продолжила работу на Макрос_n ?
    т.е. что-то типа Go-Return но на уровне макросов

  2. Сергей

    Подскажите, возможно ли, чтобы в диалоговом окне отображался только конкретный (один) файл ?

    1. Евгений (автор статьи)

      С помощью фильтра это сделать невозможно, но вы можете поместить этот файл в отдельную папку, которую сделать стартовой.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.