|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
В процессе написания данной темы проблему решил, но может кому-то пригодиться. На файловом сервере располагались отчёты содержащие макросы. При открытии отчёта срабатывала процедура Workbook_Open, в ней проверялось, что отчёт запущен из правильного каталога и если всё верно, то запускались другие макросы, выполняющие некоторые действия. На днях админ перенёс все отчёты на другой сервер, причем на первый взгляд ничего не поменялось. В обоих случаях папка с отчётами была подключена одним и тем-же диском R:. Отличие лишь, что ранее подключение шло по имени сервера, а сейчас по IP-адресу, который сообщил админ. Соответственно путь к отчётам относительно имени сетевого диска остался прежним. Вчера в конце рабочего дня всплыла проблема, что почему-то при открытии отчёта перестали автоматически запускаться макросы. По началу я думал, что перестала срабатывать процедура Workbook_Open, т.к. при ручном запуске этой процедуры по Alt+F8 все работало. Сегодня поутру копая глубже, выяснил, что процедура Workbook_Open срабатывает по автозапуску, а затык в том, что макрос, проверяя путь расположения отчёта и сверяя его с тем, какой должен быть, определял, что пути не совпадают и поэтому ничего не делают. Хотя в отладчике при пошаговом выполнении пути совпадали. Оказалось, что функция ThisWorkbook.path при пошаговом выполнении в отладчике выдаёт правильный путь и всё работает как надо, а при автоматическом запуске через процедуру Workbook_Open, она выдаёт пустую строку. Дальнейшая проверка показала, что такое происходит только если отчёт открывать с сетевого диска. Если этот-же отчёт перенести на локальный диск, то ThisWorkbook.path при автозапуске выдаёт правильный путь к файлу отчёта. Замечу что Excel 2010, сами файлы отчёта формата Excel 2003. Так-же вчера я вспомнил, что в настройках Excel 2010 в Центре управления безопасностью в Надежных расположениях ранее был указан путь к папке с отчётами с указанием имени сервера, но т.к. отчёты переехали и данный путь уже не имел смысла, то я его удалил сразу после переезда на новый сервер. Я тогда решил попробовать добавить туда новый путь. Указывал пусть содержащий IP-адрес, но Excel не давал мне его добавить, написал сообщение "Указанный путь нельзя использовать как надежной расположение по соображениям безопасности. Выберите другое расположение или определенную папку". Почему Excel не давал добавить такой путь я не понял, думал, может какие-то настройки политики безопасности не дают. Не дают и фиг с ним, думал, что это не особо и нужная настройка. Сегодня, когда писал данную тему решил, попробовать добавить пусть не по IP-адресу, а по имени сервера. Добавил путь, поставил галочку "Так-же доверять всем вложенным папкам". Соответственно диск R: подключил по новой уже по имени сервера. После этих действий функция ThisWorkbook.path при автозапуске стала выдавать правильный путь и все отчёты заработали как надо. P.S. Раньше я думал, что добавление пути в надежные расположения нужно лишь, чтобы избавиться от ненужных вопросов Excel в виде жёлтых панелек, всплывающих при открытии файла, таких как Включить содержимое. А оказывается ещё и такая подстава, что в файлах, которые Excel не считает надёжными, некоторые функции, как в данном случае ThisWorkbook.path, работают не так, как должны. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2016, 14:22 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Спасибо за подробное описание ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2016, 14:36 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Djon Player что в файлах, которые Excel не считает надёжными, некоторые функции, как в данном случае ThisWorkbook.path, работают не так, как должны. Описание не дает оснований для такого вывода. Есть два результата: 1 в доверенные пути нельзя добавить путь с ip адресом. 2 в написанной вами функции проверка каталога неверно обрабатывала путь при наличии ip адреса в нем. Видимо вам все-таки нужно сконценрироваться на п.2 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2016, 11:15 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
BobgosDjon Player что в файлах, которые Excel не считает надёжными, некоторые функции, как в данном случае ThisWorkbook.path, работают не так, как должны. 2 в написанной вами функции проверка каталога неверно обрабатывала путь при наличии ip адреса в нем. Видимо вам все-таки нужно сконцентрироваться на п.2Проверка каталога не причем, путь относительно подключенного диска не менялся. Всё заработало только после настроек в Excel 2010, код в отчётах не менялся. Все перечисленные ранее эксперименты делались на копии. В то-же время ваши слова всё равно заставили задуматься и ещё поэкспериментировать. Дальше много текста, можно не читать, выводы в самом конце. Для экспериментов использовался чистый файл с единственном кодом в объекте ЭтаКнига: Код: vbnet 1. 2. 3.
Такой-же файл я использовал в экспериментах при создании данной темы 3 назад. И тогда он при автозапуске выдавал пустую строку, а при пошаговом выполнении в отладчике выдавал правильный путь. Сегодня же при экспериментах он предательски работал правильно. Я долго искал причину этого. Дело ещё в том, что сегодня с утра сервер с папкой отчётов был добавлен админом через групповую политику в список надежных расположений, соответственно у себя в настройках Excel 2010 я уже не мог удалить его из надежных расположений. Поэтому я стал экспериментировать на других серверах, но даже на левых серверах, даже если заходишь по IP-адресу макрос предательски выдавал правильный путь. Лишь несколько раз он выдал пустую строку, но эксперимент был не повторяемый, т.е. сначала выдавал пустую строку, а потом при последующих запусках выдавал правильный путь. У меня было подозрение, что он потом начинал считать его надёжным. Но я не прекратил эксперимент, т.к. 3 дня назад при начальном написании данной темы результат был стабильным, макрос всегда выдавал пустой путь в автоматическом режиме. Не буду дальше томить написанием текста, в итоге я нашёл причину. В настройках Excel 2010 в параметрах макросов во время сегодняшних экспериментов у меня была включенной опция "Отключить все макросы с уведомлением". Так вот при такой опции при открытии файла появлялась панелька с кнопкой "Включить содержимое". Я нажимал эту кнопку, после чего макрос срабатывал и выдавал правильный путь. Как я писал выше, пару раз у меня было такое, что макрос всё-же выдавал пустую строку, так вот в тех случаях панелька "Включить содержимое" появлялась почему-то позже, уже после срабатывания макроса. Если-же сначала появлялась эта панелька и я нажимал кнопку "Включить содержимое", то макрос выдавал правильный путь. Собственно это натолкнуло меня на мысль в параметрах макросов установить пункт, который был тогда 3 дня назад, а именно "Включить все макросы (не рекомендуется, возможен запуск опасной программы)". После такой настройки результат стал стабильным. Панелька "Включить содержимое" при такой настройке не появляется, функция ThisWorkbook.path стабильно выдает пустую строку в режиме автозапуска. Итог: 1. Если в параметрах макросов установлена опция "Включить все макросы (не рекомендуется, возможен запуск опасной программы)" и файл открывается из сетевого окружения и это сетевое окружение не добавлено в список надежных расположений, то в этом случае функция ThisWorkbook.path при автозапуске выдает пустую строку. 2. Если в параметрах макросов установлена опция "Отключить все макросы с уведомлением" и файл открывается из сетевого окружения, то не важно добавлен путь в список надежных расположений или нет. а) В этом случае в 99% (цифра условная) случаев перед автозапуском появляется панелька "Включить содержимое", после нажатия которой срабатывает автозапуск и функция ThisWorkbook.path выдает правильный путь. б) В 1% случаев (цифры условные) по непонятной причине сразу-же происходит автозапуск макросов при одних и тех-же параметрах и условиях и функция ThisWorkbook.path выдаёт пустую строку, а панель "Включить содержимое" появляется уже после выполнения макроса. А уже при повторном перезапуске выдает нормальный путь. Т.е. по пункту 1 б результат не совсем стабильный, плюс куча вопросов для пользователя, их это напрягает. Лучше на мой взгляд первый вариант. Главное чтобы антивирус работал и вовремя обновлялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 17:20 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Djon Player, а не допускали тот факт, что при пошаговой отладке у VBA есть время, чтобы подключиться к сетевому диску, а при автовыполнении - нет? Это же играет роль. По факту попробуйте добавить цикл Do, который будет выполнять n-е кол-во итераций и будет выполняться до тех пор, пока ThisWorkbook.Path не станет не пустым. Думаю, не так много их потребуется, раз в пошаговой отладке все работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 21:47 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Да, еще момент: если у Вас файл открывается в защищенном режиме - то ничего не останется, как разрешить редактирование и перезапустить файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 21:49 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Djon Player, Поведеник кажется странным, но в корректности выводов не убедили. Возможно Ваша проблема кроется в среде (пк, сети) в которой проводите тесты. Проверьте родителя у книги если установлено несколько Экселей. Проверьте, чтобы после открытия не было переключения на окно со свежесозданной книгой, которая еще не сохранялась. Лучше соломки подстелить, а не гоняться за нестабильными багами. Для ранообразия попробуйте в процедуре Workbook_Open() 1. сначала создать объект, сделать его активным,а потом обращаться к его пути Код: vbnet 1. 2. 3.
2. сохранить книгу, отключив уведомления, до использования пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 21:53 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
The_PristДа, еще момент: если у Вас файл открывается в защищенном режиме - то ничего не останется, как разрешить редактирование и перезапустить файл. Пункт 2 моего предложения безопаснее, чем цикл. Сохранить файл в любом случае дольше чем открыть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 21:57 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Djon Playerб) В 1% случаев (цифры условные) по непонятной причине сразу-же происходит автозапуск макросов при одних и тех-же параметрах и условиях и функция ThisWorkbook.path выдаёт пустую строку, а панель "Включить содержимое" появляется уже после выполнения макроса. А уже при повторном перезапуске выдает нормальный путь. . Макросы не должны работать, пока они не будут разрешены. Значит код в другой книге, для которой макросы уже разрешили. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2016, 22:01 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Bobgos, Нет, книга единственная открывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2016, 16:26 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
Такая проблема может происходить и на локальном диске, и это проявлялось с версии Excel2002. Суть проблемы в том, что приложение Excel при открытии может быть ещё не готово (Application.Ready равно False). Проблема не проявляется, если книга загружается в ранее открытом приложении Excel. Чтобы код Workbook_Open() выполнялся гарантированно, нужно сделать так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Здесь с помощью Call Application.Ready(Now, Процедура) выполнение процедуры произойдет не мгновенно, несмотря на Now, а после того, как Excel полностью загрузится. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2016, 10:04 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
ZVIЗдесь с помощью Call Application. Ready (Now, Процедура) Опечаьтка, должно быть: Здесь с помощью Call Application. OnTime (Now, Процедура) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2016, 10:06 |
|
Проблема с ThisWorkbook.Path при открытии сетевого файла
|
|||
---|---|---|---|
#18+
ZVI, Видимо действительно так и есть. Потому что когда я стал дальше экспериментировать с кодом по советам откомментировавших пользователей (в частности используя циклы), стал получать результаты, которые уже никак не мог объяснить, на этом прекратил экспериментирование, приняв это как некий глюк Excel, т.к. по другому никак не объяснить то, что результат выполнения одного и того-же кода при равных условиях разный, хочет работает, не хочет не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2016, 22:58 |
|
|
start [/forum/topic.php?fid=61&msg=39334601&tid=2172870]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 312ms |
total: | 447ms |
0 / 0 |