Открыть папку (каталог) в проводнике Windows для просмотра из кода VBA Excel с помощью функции Shell и ключевых слов explorer и cmd. Передача фокуса открытой папке.
Открытие папки в проводнике
Открытие папки (каталога) в проводнике Windows для просмотра с помощью функции Shell и ключевого слова explorer:
1 |
Shell "explorer C:\Users\Public\Текущая папка", vbNormalFocus |
vbNormalFocus означает, что окно Windows Explorer получает фокус и восстанавливает свое исходное положение и размер.
Преимущество способа: имя папки может содержать пробелы.
Недостаток способа: если открываемая папка уже открыта, открывается второй экземпляр, затем третий и т.д.
То же преимущество и тот же недостаток у следующего способа:
1 |
ThisWorkbook.FollowHyperlink "C:\Users\Public\Текущая папка" |
Открытие или передача фокуса
Открытие папки (каталога) в проводнике Windows для просмотра или передача папке фокуса, если она уже открыта, с помощью функции Shell и ключевого слова cmd:
1 |
Shell "cmd /C start C:\Users\Public", vbNormalFocus |
При реализации этого способа происходит кратковременное отображение на экране окна командной строки (cmd.exe). Если убрать параметр vbNormalFocus
, окно командной строки мелькать не будет, но и окно проводника, при повторном его вызове, не получит фокус.
Преимущество способа: если открываемая папка уже открыта, ей передается фокус, а второй экземпляр этой папки не открывается.
Недостаток способа: имя папки не должно содержать пробелы.
От недостатка этого способа можно избавиться с помощью экранирующих кавычек:
1 |
Shell "cmd /C start """" ""C:\Users\Public\Текущая папка""", vbNormalFocus |
Для себя на заметку, какие кавычки что экранируют:
1 |
"[cmd /C start ""[неиспользуемый параметр]"" ""[C:\Users\Public\Текущая папка]""]" |
Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.
Если папка
еще не была открыта на ПК, то при выполнении команды
действительно открывается эта папка, развернутая на весь экран (как это принято в системе) и ей передаётся фокус (т.е. эта папка становится тем, что показывается на экране).
Казалось бы — вот оно — счастье. Но если переключиться на лист Эксель (или редактор VBA) и запустить этот же макрос еще раз, папка подсветится на панели задач, а на экране будет по-прежнему лист Эксель (или редактор VBA).
В чем прОкол?
У меня работает также. Используйте второй параметр, который будет передавать фокус окну проводника всегда, но, вместе с тем, будет мелькать окно командной строки:
Обсуждение закрыто.