И снова всем привет. Спрошу еще один вопрос, т.к. в данной теме совсем не силен. Проблема актуальна для надстроек. Можно ли как-то в VBA определить путь активного окна проводника, т.е. какая папка винды активна и открыта в окне перед тобой? Когда макрос работает из конкретного файла, тут все просто, или когда путь известен заранее - тоже можно задать заранее, но вот если просто открыт какой-то документ Excel, и при этом тебе надо что-то сделать с файлами в совсем другой директории и она открыта в проводнике. здесь вопрос, как это сделать.
Определить активное окно проводника
03.06.2018 19:11:28
|
|
|
|
03.06.2018 19:24:16
Pачем Вам для этого её определять?
и Вы точно её знаете |
|||
|
|
03.06.2018 19:27:43
Нет, активным окном может быть не это. Управление из надстройки.
|
|
|
|
03.06.2018 19:34:05
Laider, тогда объясните толком, для чего Вам его знать? Мне приходит в голову только один вариант - активную в Проводнике папку нельзя убить. А для этого достаточно сделать её заведомо неактивной...
|
|
|
|
03.06.2018 19:38:04
То есть Вам нужно знать, где там надстройка рылась?
|
|
|
|
03.06.2018 19:41:17
Кто этот несчастный?! |
|||
|
|
03.06.2018 19:50:39
|
|
|
|
03.06.2018 19:54:21
Мне бы только подсказку по части 1. а дальше я разберусь)) Нашел что-то вроде Declare Function GetActiveWindow& Lib "user32" () , но не знаю с той ли оперы.
|
|
|
|
03.06.2018 20:01:06
Мне тут Гугль всемогущий намекает, что можно посмотреть в сторону Environ, но так ли это - не знаю, лень на Винду переключаться...
|
|
|
|
03.06.2018 22:00:12
Андрей, а я так понял, что у автора следующая проблема: кто-то неведомый, неведомым способом открыл проводник и пробрался до некой папки - вот автор и хочет узнать этот путь ))
|
|
|
|
03.06.2018 22:31:39
Юрий, в любом случае речь идёт о макросе, который нечто должен сделать в папке. Пользователь должен её указать. Я собственно так толкую и предлагаю использовать стандартный подход.
В противном случае возникают вопросы. Как запускается макрос? 1. Сразу и дожидается когда пользователь закончит выбор в проводнике. Возникает резонный вопрос - а как определить, что пользователь закончил выбор требуемой для работы папки? 2. Пользователь запускает проводник, находит папку, возвращается в Excel и запускает макрос. Но тогда вопрос не по теме. В этом случае активен Excel, а не проводник. GetActiveWindow вернёт Excel. Ну, можно, пройдись по списку открытых окон отобрать все окна проводника и по порядку положения (типа ZOrder) определить - какое из них было активным. Только вот проблема. Пользователь может перед тем как запустить макрос и не запускать проводник (они талантливые). Или когда то пользователь запускал проводник, но, опять же перед запуском макроса, не запустил новую копию проводника или в старом окне проводника не выбрал нужную папку. Ну, и что будет? Хорошо если макрос только пытается создать в той папке некоторые файлы, а если ещё и чего-то удаляет? А судя по квалификации ТС, удалить может и всё что там есть |
|
|
|
03.06.2018 22:31:41
Изменено: |
|||
|
|
03.06.2018 22:41:51
|
|||
|
|
03.06.2018 22:52:23
Это понятно. Только Excel отдельное приложение. Еxplorer отдельное, получается последнее бывшее активным окно. Вот указанный выше код считает только окна проводника.
|
|
|
|
03.06.2018 23:06:52
|
||||
|
|
|||