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, поэтому редактируйте, как считаете нужным. Я просто обезьяна на клавиатуре, здесь, поэтому все комментарии и предложения приветствуются.
Вы можете использовать командную строку, чтобы открыть Проводник с пути.
вот пример с пакетной или командной строкой:
Как из Excel открыть папку с файлами Word
Всем доброе время суток !
Есть задача.
Как кнопкой, находящейся в Книге Excel, открыть папку с несколькими документами (файлами) Word? Книга с кнопкой и папка с документами Word находятся в одной папке.
Код такой
Открыть папку с txt файлами
Всем привет, есть задумка пока не могу ее реализовать, надеюсь поможете. Суть задачи такова.
Как открыть документ Word из VBA-Excel
Господа, есть несколько скромных вопросов, надеюсь на ваше участие: 1) Как открыть док-т Word из.
Как открыть html-файл через MS Word и MS Excel?
Здравствуйте, вопрос в заголовке темы. Конкретно интересует как это сделать с ShellExecute. Буду.
Run-time error’ -2147024894(80070002)’:
Method ‘Run ‘of object ‘WshShell3’ failed
Открыть папку очевидно можно с помощью проводника или вызываемого диалога в Excel. Лучше без диалога — нажал на кнопку и получил доступ к файлам Word для работы. Папка с файлами Word и Книга Excel с кнопкой находятся в одной папке.
Добавлено через 17 минут
вот так у меня работает открытие папки, в которой лежит активная книга:
Sub Макрос1_Щелкнуть()
Shell «explorer.exe » & ThisWorkbook.Path
End Sub
Открывается папка в проводнике — получаем доступ к файлам Word для работы
Уже прогресс !
Вставил в процедуру, пока, код от petr-sev. Открывает, однако, общую папку с Книгой и папкой с документами Word. Эта общая папка не активна. Макрос должен открывать только папку с документами. Необходимо, очевидно, указать путь.
Добавлено через 1 час 18 минут
Указав путь выходим на нужную папку с документами
Однако папка с документами свёрнута или не активна, её ярлык видно на панели уведомлений. Для выхода на файлы в папке ещё необходимо нажать ярлык папки на панели уведомлений.
Такой вопрос — какую ещё добавить команду, чтобы папка с документами появлялась активной, тоесть, чтобы были видны непосредственно ярлыки внутренних файлов Word в папке ?
Извиняюсь, за подъем старой темы, просто может кто тоже с таким столкнется с этим как и я сейчас, вот нашел решение- проверенно:
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Открыть папку с файлами и переименовывать все файлы по номерам
Скрипт должен открыть папку с файлами и переименовывает все файлы по номерам (1,2,3,4,….) .
Можно как либо открыть файл для редактирования в Excel и в Word?
Можно как либо открыть файл для редактирования в Excel и в Word (но не в браузере)?
Как скопировать папку с файлами в другую папку с заменой средствами php?
Как скопировать папку с файлами в другую папку с заменой средствами php? Из.
Работа с файлами. Как сканировать папку и переносить от туда лишнее в другую папку
Хочу написать программу со следующим функционалом: Имеется директория, по пути C:MyFolder. В этой.
Vba excel открыть папку
Есть файлы *.htm их надо открывыть в Excel2000 для последующей автоматической обработки посредствам VBA.
Если открывать Workbooks.Open Filename:= _»имя файла» из существующего документа exсel то файл открывается в новом автоматически создающемся документе excel. Возможно ли сделать так, чтобы файл открывался не в новом созданном документа, а на второй странице существующего?
Мне в голову приходит только такой вариант: открыть файл из текущего документа , затем из нового созданной документа excel скопировать данные этого файла в старый документ exсel и закрыть новый созданный. — Может есть какой нибудь более правильный/умный способ?
Можно ли открыть в одном и том же документе excel несколько файлов и чтобы они присутствовали в нём одновременно?
Как средствами VBA для открытия файлов не задавать точное имя файла (Workbooks.Open Filename:= _»имя файла» ), а вызвать диалоговое окно типа стандартного для открытия файлов — Файл->Открыть ?
Почему при открытии файла Файл->Открыть некторые числа файла в Excel’e отображаются как Дата — май.43 , а при открытии через VBA Workbooks.Open Filename:= _» все чесла отображаются нормально?
ВВ
1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать Ссылка на ячейки другой книги в этой же директории без указания полного пути (http://forum.ixbt.com/topic.cgi?id=23:29699) (что будет непонятно обращайся помогу)
или как вариант открываем как обычно потом копируем лист нужный, и закрываем исходный файл
(ну этот вариант ты уже и сам увидел)
2. вызов диалогового окна
Добавление от 29.10.2005 17:49:
это проблема с десятичным разделителем для русской раскладки это «,» для английской «.» (вроде так )
вообщем когда ты открываешь и считываешь с десятичным разделителем точка, то Excel расценивает это как дату, если бы была запятая все было бы ок.
мне твой вариант повторить не удалось с разным открытием что так что так открывалось одинаково
V3
1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать
Ещё непопробовал. Данные возможно считывть только из закрытой книги excel? Из закрытого файла *.htm их тоже возможно считывать, если доработать функцию?
2. вызов диалогового окна
Нехочет у меня эта процедура работать ругается на FileDialog — user-defined type not defined. Надо какие то библиотеки подключать? Или прототипы библиотечных функций писать?
Добавление от 30.10.2005 20:47:
C датами как то странно, несовсем понял. Excel файлы по какому то разному методу открывает: если вручную Файл->Открыть — то даты получаются вместо чисел, а если на VBA Workbooks.Open Filename:= то всё нормально.
Поменял в настройках(Язык и стандарты) запятую на точку и всё стало нормально и при открытии через Файл->Открыть. Только это всё будет использоваться на разных компах. хотел бы добиться полной автоматизированности — без инструкций юзерам — «Поменяйте там то на то то. «
но лучше наверно попробовать сходу считывать данные без открытия и подменять разделитель
или когда считали данные их уже обработать
Есть ли какая нибудь стандартная функция которая конвертит дату в число? — только нормальное число которое было в оригинальном файле, а не то что excel выдаёт если поменять формат ечейки с даты на числовой.
P.S. Делаю всё в Win2K Excel2000
ВВ
1. можно и из html брать, только надо смотреть как организовать это дело или как просто чтение из текстового файла. Та функция что по ссылки с html работать не будет
2. Упсс извени не посмотрел твою версию Excel
FileDialog появился с версии 2002, поэтому предыдущими версиями не поддерживается
тебе надо использовать
object.GetOpenFilename (фильтр файла, идекс фильтра, заголовок, подпись кнопки, множественный выбор)
набирал с листа так сказать, поэтому могут быть синтаксические помарки поправь если что
Добавление от 30.10.2005 21:43:
ВВ
как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)
Добавление от 31.10.2005 03:51:
Исправил не большую ошибку, и немного расширил пример чтобы было понятнее
В данном примере кода нельзя использовать выделения файлов с Ctrl и Shift (т.е. сразу несколько) для этого надо изменить немного
По поводу точки/запятой может быть надо проверять версию Excel (русская/английская)
Спасибо за ответы!
V3
1. Решил пойти всё же первым варинатом — открыть и оттуда скопировать.
2.
Хотел только ещё указать каталог в котором открывать через ChDir, но неполучилось
3. как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)
Если я поставлю макрос полсе того как открою: Workbooks.Open Filename:= , то он уже непоможет, так как уже будут даты. А как его поставить на открытие книги?
Добавление от 31.10.2005 09:28:
да я и ошибки то незаметил, опечатка только strig вместо string
Как на 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, и запускайте макрос.
У меня на этом все, надеюсь, материал был Вам полезен, пока!
Объект FileSystemObject для работы с файлами. С примерами на VBA
Объект FileSystemObject
Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.
1. Создание объекта
2. Свойства
2.1. Drives
Возвращаемое значение: объект-коллекция «Drives».
Замечание: только чтение.
3. Методы
3.1. CreateFolder
Назначение: создаёт каталог с указанным именем.
- — строка, путь к каталогу. Если такой каталог уже существует, произойдёт ошибка.
3.2. CopyFile
Назначение: копирует один или несколько файлов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
- — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
3.3. CopyFolder
Назначение: рекурсивно копирует каталог.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
- — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
Описание: процесс копирования прерывается после первой возникшей ошибки.
3.4. MoveFile
Назначение: перемещает один или несколько файлов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.
3.5. MoveFolder
Назначение: рекурсивно перемещает один или несколько каталогов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.
3.6. DeleteFile
Назначение: удаляет указанный файл.
- — строка, путь к файлу. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).
3.7. DeleteFolder
Назначение: удаляет указанную папку.
- — строка, путь к папке. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).
3.8. BuildPath
Назначение: добавляет к заданному пути новое имя. Если необходимо, вставляется «».
— строка, путь.
3.9. GetAbsolutePathName
Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).
— строка, относительный путь.
3.10. GetBaseName
Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.
3.11. GetExtensionName
Назначение: возвращает расширение последнего компонента в заданном пути.
3.12. GetFileName
Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.
3.13. GetParentFolderName
Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).
3.14. GetDriveName
Назначение: возвращает имя диска в заданном пути.
3.15. DriveExists
Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.
3.16. FileExists
Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.
3.17. FolderExists
Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.
3.18. GetDrive
Назначение: возвращает объект «Drive» по указанному имени или пути.
- — строка, имя диска или путь к корневому каталогу диска, возможно UNC-путь.
3.19. GetFile
Назначение: возвращает объект «File» по указанному пути.
Описание: если файл не существует, произойдёт ошибка.
3.20. GetFolder
Назначение: возвращает объект «Folder» по указанному пути.
Описание: если каталог не существует, произойдёт ошибка.
3.21. GetSpecialFolder
Назначение: возвращает объект «Folder» для некоторых специальных папок Windows.
- — число, определяет специальную папку. Возможные значения:
- 0 — Каталог Windows.
- 1 — Системный каталог библиотек и драйверов.
- 2 — Каталог временных файлов, путь к которому хранится в переменной среды «TMP».
Описание: если каталог не существует, произойдёт ошибка.
3.22. GetTempName
Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.
3.23. CreateTextFile
Назначение: создаёт новый текстовый файл и возвращает объект «TextStream», указывающий на него.
- — строка, путь к файлу.
- — необязательный, булево (число). Перезаписывать файл, если он существует (True), или нет (False). По умолчанию — False. Если указано False и файл существует — произойдёт ошибка.
- — необязательный, булево (число). Файл в формате Unicode (True), или ASCII (False). По умолчанию — False.
3.24. OpenTextFile
Бесплатный видеокурс по SQL