Vba excel текущая папка
Как открыть папку в Проводнике Windows из VBA?
Я хочу нажать кнопку в моей форме доступа, которая открывает папку в Проводнике Windows.
есть ли способ сделать это в VBA?
11 ответов
вы можете использовать следующий код, чтобы открыть расположение файла из VBA.
этот код можно использовать как для общих ресурсов windows, так и для локальных дисков.
VbNormalFocus может быть swapper для VbMaximizedFocus, если вы хотите развернутое представление.
самый простой способ-это
которая занимает только одну строку!
вот еще несколько интересных знаний, чтобы пойти с этим:
У меня была ситуация, когда мне нужно было найти папки на основе немного критериев в записи, а затем открыть папку(ы), которые были найдены. При выполнении работы по поиску решения я создал небольшую базу данных, которая запрашивает начальную папку поиска, дает место для 4 частей критериев, а затем позволяет пользователю выполнять сопоставление критериев, которое открывает 4 (или более) возможные папки, соответствующие введенному критерий.
вот весь код в форме:
форма имеет подформу на основе таблицы, форма имеет 4 текстовых поля для критериев, 2 кнопки, ведущие к процедурам щелчка и 1 другое текстовое поле для хранения строки для папки «пуск». Есть 2 текстовых поля, которые используются, чтобы показать число папок и количество обработанных при поиске их по критериям.
Если бы у меня был представитель, Я бы опубликовал фотографию. :/
У меня есть еще кое-что, что я хотел добавить в этот код, но еще не было возможности. Я хочу иметь способ сохранить те, которые работали в другой таблице или заставить пользователя пометить их как хорошие для хранения.
Я не могу претендовать на полный кредит для всего кода, я собрал некоторые из них вместе из вещей, которые я нашел повсюду, даже в других сообщениях на stackoverflow.
Мне очень нравится идея размещения вопросов здесь, а затем отвечать на них самостоятельно, потому что связанная статья говорит, что это позволяет легко найти ответ для более поздней ссылки.
когда я закончу другие части, которые я хочу добавить, я также опубликую код для этого. 🙂
благодаря комментарию PhilHibbs (на ответ VBwhatnow) я, наконец, смог найти решение, которое как повторно использует существующие окна, так и избегает мигания CMD-окна у пользователя:
где «путь» — это папка, которую вы хотите открыть.
(в этом примере я открываю папку, в которой сохраняется текущая книга.)
плюсы:
- избегает открытия новых экземпляров explorer (только устанавливает фокус, если окно существует.)
- cmd-окно никогда видимые благодаря vbHide.
- относительно просто (не нужно ссылаться на библиотеки win32).
плюсы:
- максимизация окна (или минимизация) является обязательной.
объяснение:
сначала я пытался использовать только vbHide. Это прекрасно работает. если только уже не открыта такая папка, в этом случае в существующее окно папки становится скрытым и исчезает! теперь у вас есть призрачное окно, плавающее в памяти, и любая последующая попытка открыть папку после этого будет повторно использовать скрытое окно — по-видимому, не имеет никакого эффекта.
другими словами, когда команда «Пуск» находит существующее окно, указанный vbAppWinStyle применяется к и CMD-окно и повторно используемое окно Проводника. (Так что, к счастью, мы можем использовать это, чтобы раскрыть наше призрачное окно, позвонив та же команда снова с другим аргументом vbAppWinStyle.)
однако, указав флаг /max или /min при вызове «пуск», он предотвращает рекурсивное применение vbappwinstyle, установленного в окне CMD. (Или переопределяет его? Я не знаю, каковы технические детали, и мне любопытно точно знать, какая здесь цепь событий.)
вот что я сделал.
плюсы:
- избегает открытия новых экземпляров explorer (только устанавливает фокус, если окно существует.)
- относительно просто (не нужно ссылаться на библиотеки win32).
- максимизация окна (или минимизация) — это не обязательным. Окно откроется с нормальным размером.
плюсы:
- cmd-окно отображается для короткого время.
это последовательно открывает окно в папку, если нет открытых и переключается в открытое окно, если есть один открытый в эту папку.
спасибо PhilHibbs и AnorZaken за основу для этого. Комментарий PhilHibbs не совсем сработал для меня, мне нужно было в командной строке иметь пару двойных кавычек перед именем папки. И я предпочел, чтобы окно командной строки появилось немного, а не было вынуждено иметь окно Проводника максимизировано или минимизировано.
вот ответ, который дает поведение переключателя или запуска Start без окна командной строки. У него есть недостаток, что его можно обмануть с помощью окна Проводника, в котором открыта папка с тем же именем в другом месте. Я мог бы исправить это, нырнув в окна ребенка и ища фактический путь, мне нужно выяснить, как перемещаться по нему.
использование (требуется «объектная модель Хоста сценария Windows» в вашем проекте Литература):
Private Sub Command0_Click ()
приложение.FollowHyperlink «D:1ZsnsnSusuBarokah20151008 Инвентаризация.mdb»
Я не могу использовать команду оболочки из-за безопасности в компании, поэтому лучший способ я нашел в интернете.
Итак, на самом деле его
Я просто использовал это, и она отлично работает:
благодаря многим ответам выше и в других местах, это было мое решение аналогичной проблемы с OP. Проблема для меня заключалась в создании кнопки в Word, которая запрашивает у пользователя сетевой адрес и вытаскивает ресурсы LAN в окне Проводника.
нетронутый, код приведет вас к 10.1.1.1Test, поэтому редактируйте, как считаете нужным. Я просто обезьяна на клавиатуре, здесь, поэтому все комментарии и предложения приветствуются.
Вы можете использовать командную строку, чтобы открыть Проводник с пути.
вот пример с пакетной или командной строкой:
Как на VBA сохранить файл Excel с названием, взятым из ячейки?
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».
Код процедуры
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Сохранение файла Excel с названием из ячейки — без привязки к ячейке
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.
В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в данном случае будет выглядеть следующим образом.
Все ОК, файл создан.
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
У меня на этом все, надеюсь, материал был Вам полезен, пока!
VBA Excel. Объект FileSystemObject
Объект FileSystemObject, предоставляющий в VBA Excel доступ к файловой системе компьютера. Создание экземпляра FileSystemObject и его методы. Примеры.
Объект FileSystemObject
Объект FileSystemObject обеспечивает в коде VBA Excel следующие возможности:
- Проверка существования диска, папки или файла.
- Создание новой папки.
- Создание текстового файла и предоставление последовательного доступа для записи.
- Открытие текстового файла и предоставление последовательного доступа для записи или чтения.
- Копирование, перемещение и удаление папок и файлов.
- Работа с путями к папкам и файлам.
- Возвращение имен дисков, папок и файлов.
Создание, свойство, методы
Создание экземпляра FileSystemObject
Создать новый экземпляр объекта FileSystemObject можно с помощью раннего или позднего связывания.
Раннее связывание
Позднее связывание
Свойство FileSystemObject
В VBA Excel у объекта FileSystemObject есть только одно свойство (Excel 2016):
Свойство | Описание |
Drives | Возвращение коллекции всех дисков на компьютере |
Методы FileSystemObject
Свойство | Описание |
BuildPath | Добавление имени в существующий путь |
CopyFile | Копирование одного или нескольких файлов из одного расположения в другое |
CopyFolder | Копирование одной или нескольких папок из одного расположения в другое |
CreateFolder | Создание новой папки |
CreateTextFile | Создание текстового файла и возвращение объекта TextStream, используемого для записи в файл |
DeleteFile | Удаление одного или нескольких указанных файлов |
DeleteFolder | Удаление одной или нескольких указанных папок |
DriveExists | Проверка существования указанного диска |
FileExists | Проверка существования указанного файла |
FolderExists | Проверка существования указанной папки |
GetAbsolutePathName | Возвращение полного пути из корневого каталога диска для указанного пути |
GetBaseName | Возвращение базового имени указанного файла или папки |
GetDrive | Возвращение объекта Drive, соответствующего диску в указанном пути |
GetDriveName | Возвращение имени диска указанного пути |
GetExtensionName | Возвращение расширения файла для последнего компонента в указанном пути |
GetFile | Возвращение файла по указанному пути |
GetFileName | Возвращение имени файла или папки для последнего компонента в указанном пути |
GetFileVersion | Возвращение версии файла для последнего компонента в указанном пути |
GetFolder | Возвращение папки по указанному пути |
GetParentFolderName | Возвращение имени родительской папки последнего компонента в указанном пути |
GetSpecialFolder | Возвращение пути к некоторым специальным папкам Windows |
GetStandardStream | Возвращение стандартного ввода, вывода или потока ошибок |
GetTempName | Возвращение созданного случайным образом временного файла или папки |
Move | Перемещение указанного файла или папки из одного места в другое |
MoveFile | Перемещение одного или нескольких файлов из одного места в другое |
MoveFolder | Перемещение одного или нескольких папок из одного места в другое |
OpenTextFile | Открытие файла по указанному пути и возвращение объекта TextStream, используемого для чтения, записи и добавления данных в файл |
Примеры кода с FileSystemObject
Пример 1
Получение списка всех дисков на компьютере с помощью свойства Drives: