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

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

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

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

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

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

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

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

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

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

Для справки:

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

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

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

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

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

Пример 1

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

Пример 2

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

Пример 3

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

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

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

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

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

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

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

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

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

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

  3. Геннадий

    Добрый день! Спасибо за статью. А как в качестве стартовой папки указать сетевой путь типа “\\Папка1\Папка2”? В данном случае ChDir не срабатывает. Через shell и подключение сетевого диска в пошаговом режиме ChDir работает, а в целом нет.

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

      Добрый день, Геннадий!
      В разделе Declarations объявите функцию SetCurrentDirectoryA:

      Далее в программе переопределите путь по умолчанию на сетевой:

      Геннадий, работоспособность кода я не проверил на сетевых папках из-за их отсутствия. С обычными папками работает. Напишите, что получилось.

    1. Евгений

      Привет, Филипп!
      При закрытии диалога выбора файлов нажатием на крестик или кнопку «Отмена» метод Application.GetOpenFilename возвращает значение False. По возвращенному значению можно отследить нажатие кнопок пользователем:

  4. Здравствуйте, есть ли возможность применить Application.GetOpenFilename с заданием фильтра не только по расширению файла, но и по имени (А*.xls), (B*.xls), (C*.xls) по типу поиска файла в Windows. Если таким образом пытаться ничего не выходит – *.* получается…

    Спасибо…

    1. Евгений

      Здравствуйте, Леонид!
      Стандартный диалог Application.GetOpenFilename не предусматривает создание фильтров с шаблонами по именам файлов. Частично решить данный вопрос поможет создание нового экземпляра диалогового окна Application.FileDialog с указанием параметра InitialFileName. Частично, потому что здесь можно применить только один шаблон и только в имени файла (не в пути к нему). Но если дать имена файлам с повторяющейся подстрокой, это вполне сработает.

      Метод Execute открывает выбранный файл.

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

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег <pre> и по окончании кода </pre>.