Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема с ThisWorkbook.Path при открытии сетевого файла / 13 сообщений из 13, страница 1 из 1
07.10.2016, 14:22
    #39322811
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
В процессе написания данной темы проблему решил, но может кому-то пригодиться.

На файловом сервере располагались отчёты содержащие макросы. При открытии отчёта срабатывала процедура 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, работают не так, как должны.
...
Рейтинг: 0 / 0
07.10.2016, 14:36
    #39322827
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Спасибо за подробное описание
...
Рейтинг: 0 / 0
08.10.2016, 11:15
    #39323182
Bobgos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Djon Player что в файлах, которые Excel не считает надёжными, некоторые функции, как в данном случае ThisWorkbook.path, работают не так, как должны.
Описание не дает оснований для такого вывода.
Есть два результата:
1 в доверенные пути нельзя добавить путь с ip адресом.
2 в написанной вами функции проверка каталога неверно обрабатывала путь при наличии ip адреса в нем.
Видимо вам все-таки нужно сконценрироваться на п.2
...
Рейтинг: 0 / 0
10.10.2016, 17:20
    #39323924
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
BobgosDjon Player что в файлах, которые Excel не считает надёжными, некоторые функции, как в данном случае ThisWorkbook.path, работают не так, как должны.
2 в написанной вами функции проверка каталога неверно обрабатывала путь при наличии ip адреса в нем.
Видимо вам все-таки нужно сконцентрироваться на п.2Проверка каталога не причем, путь относительно подключенного диска не менялся. Всё заработало только после настроек в Excel 2010, код в отчётах не менялся. Все перечисленные ранее эксперименты делались на копии.
В то-же время ваши слова всё равно заставили задуматься и ещё поэкспериментировать.

Дальше много текста, можно не читать, выводы в самом конце.

Для экспериментов использовался чистый файл с единственном кодом в объекте ЭтаКнига:
Код: vbnet
1.
2.
3.
Private Sub Workbook_Open()
 MsgBox ThisWorkbook.path
End Sub


Такой-же файл я использовал в экспериментах при создании данной темы 3 назад. И тогда он при автозапуске выдавал пустую строку, а при пошаговом выполнении в отладчике выдавал правильный путь.

Сегодня же при экспериментах он предательски работал правильно. Я долго искал причину этого. Дело ещё в том, что сегодня с утра сервер с папкой отчётов был добавлен админом через групповую политику в список надежных расположений, соответственно у себя в настройках Excel 2010 я уже не мог удалить его из надежных расположений. Поэтому я стал экспериментировать на других серверах, но даже на левых серверах, даже если заходишь по IP-адресу макрос предательски выдавал правильный путь. Лишь несколько раз он выдал пустую строку, но эксперимент был не повторяемый, т.е. сначала выдавал пустую строку, а потом при последующих запусках выдавал правильный путь. У меня было подозрение, что он потом начинал считать его надёжным. Но я не прекратил эксперимент, т.к. 3 дня назад при начальном написании данной темы результат был стабильным, макрос всегда выдавал пустой путь в автоматическом режиме.

Не буду дальше томить написанием текста, в итоге я нашёл причину.

В настройках Excel 2010 в параметрах макросов во время сегодняшних экспериментов у меня была включенной опция "Отключить все макросы с уведомлением". Так вот при такой опции при открытии файла появлялась панелька с кнопкой "Включить содержимое". Я нажимал эту кнопку, после чего макрос срабатывал и выдавал правильный путь.

Как я писал выше, пару раз у меня было такое, что макрос всё-же выдавал пустую строку, так вот в тех случаях панелька "Включить содержимое" появлялась почему-то позже, уже после срабатывания макроса. Если-же сначала появлялась эта панелька и я нажимал кнопку "Включить содержимое", то макрос выдавал правильный путь.

Собственно это натолкнуло меня на мысль в параметрах макросов установить пункт, который был тогда 3 дня назад, а именно "Включить все макросы (не рекомендуется, возможен запуск опасной программы)".
После такой настройки результат стал стабильным. Панелька "Включить содержимое" при такой настройке не появляется, функция ThisWorkbook.path стабильно выдает пустую строку в режиме автозапуска.

Итог:
1. Если в параметрах макросов установлена опция "Включить все макросы (не рекомендуется, возможен запуск опасной программы)" и файл открывается из сетевого окружения и это сетевое окружение не добавлено в список надежных расположений, то в этом случае функция ThisWorkbook.path при автозапуске выдает пустую строку.
2. Если в параметрах макросов установлена опция "Отключить все макросы с уведомлением" и файл открывается из сетевого окружения, то не важно добавлен путь в список надежных расположений или нет.
а) В этом случае в 99% (цифра условная) случаев перед автозапуском появляется панелька "Включить содержимое", после нажатия которой срабатывает автозапуск и функция ThisWorkbook.path выдает правильный путь.
б) В 1% случаев (цифры условные) по непонятной причине сразу-же происходит автозапуск макросов при одних и тех-же параметрах и условиях и функция ThisWorkbook.path выдаёт пустую строку, а панель "Включить содержимое" появляется уже после выполнения макроса. А уже при повторном перезапуске выдает нормальный путь.

Т.е. по пункту 1 б результат не совсем стабильный, плюс куча вопросов для пользователя, их это напрягает.

Лучше на мой взгляд первый вариант. Главное чтобы антивирус работал и вовремя обновлялся.
...
Рейтинг: 0 / 0
10.10.2016, 21:47
    #39324071
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Djon Player,

а не допускали тот факт, что при пошаговой отладке у VBA есть время, чтобы подключиться к сетевому диску, а при автовыполнении - нет? Это же играет роль.
По факту попробуйте добавить цикл Do, который будет выполнять n-е кол-во итераций и будет выполняться до тех пор, пока ThisWorkbook.Path не станет не пустым. Думаю, не так много их потребуется, раз в пошаговой отладке все работает.
...
Рейтинг: 0 / 0
10.10.2016, 21:49
    #39324073
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Да, еще момент: если у Вас файл открывается в защищенном режиме - то ничего не останется, как разрешить редактирование и перезапустить файл.
...
Рейтинг: 0 / 0
10.10.2016, 21:53
    #39324075
Bobgos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Djon Player,
Поведеник кажется странным, но в корректности выводов не убедили.

Возможно Ваша проблема кроется в среде (пк, сети) в которой проводите тесты.
Проверьте родителя у книги если установлено несколько Экселей.
Проверьте, чтобы после открытия не было переключения на окно со свежесозданной книгой, которая еще не сохранялась.

Лучше соломки подстелить, а не гоняться за нестабильными багами.

Для ранообразия попробуйте в процедуре Workbook_Open()
1. сначала создать объект, сделать его активным,а потом обращаться к его пути
Код: vbnet
1.
2.
3.
Set Wb = ThisWorkbook
Wb.worksheets(1).select
Msgbox( Wb.path )


2. сохранить книгу, отключив уведомления, до использования пути.
...
Рейтинг: 0 / 0
10.10.2016, 21:57
    #39324077
Bobgos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
The_PristДа, еще момент: если у Вас файл открывается в защищенном режиме - то ничего не останется, как разрешить редактирование и перезапустить файл.
Пункт 2 моего предложения безопаснее, чем цикл. Сохранить файл в любом случае дольше чем открыть.
...
Рейтинг: 0 / 0
10.10.2016, 22:01
    #39324081
Bobgos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Djon Playerб) В 1% случаев (цифры условные) по непонятной причине сразу-же происходит автозапуск макросов при одних и тех-же параметрах и условиях и функция ThisWorkbook.path выдаёт пустую строку, а панель "Включить содержимое" появляется уже после выполнения макроса. А уже при повторном перезапуске выдает нормальный путь.
.
Макросы не должны работать, пока они не будут разрешены. Значит код в другой книге, для которой макросы уже разрешили.
...
Рейтинг: 0 / 0
26.10.2016, 16:26
    #39334601
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Bobgos,
Нет, книга единственная открывается.
...
Рейтинг: 0 / 0
31.10.2016, 10:04
    #39337574
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
Такая проблема может происходить и на локальном диске, и это проявлялось с версии Excel2002.
Суть проблемы в том, что приложение Excel при открытии может быть ещё не готово (Application.Ready равно False).
Проблема не проявляется, если книга загружается в ранее открытом приложении Excel.
Чтобы код Workbook_Open() выполнялся гарантированно, нужно сделать так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
' Код в модуле ЭтаКнига (ThisWorkbook)

Private Sub Workbook_Open()
  ' Зарядить выполнение кода после полной загрузки приложения
  Application.OnTime Now, Chr(39) & Me.Name & Chr(39) & "!" & Me.CodeName & ".Workbook_Open1"
End Sub

Private Sub Workbook_Open1()
  ' Код, который безопасно выполняется при загрузке книги
  ' (т.е. код, клоторый ранее предусматривался в Workbook_Open)
  MsgBox "Path = " & Me.Path
End Sub


Здесь с помощью Call Application.Ready(Now, Процедура) выполнение процедуры произойдет не мгновенно, несмотря на Now, а после того, как Excel полностью загрузится.
...
Рейтинг: 0 / 0
31.10.2016, 10:06
    #39337580
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
ZVIЗдесь с помощью Call Application. Ready (Now, Процедура)
Опечаьтка, должно быть: Здесь с помощью Call Application. OnTime (Now, Процедура)
...
Рейтинг: 0 / 0
13.11.2016, 22:58
    #39346524
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ThisWorkbook.Path при открытии сетевого файла
ZVI,

Видимо действительно так и есть.
Потому что когда я стал дальше экспериментировать с кодом по советам откомментировавших пользователей (в частности используя циклы), стал получать результаты, которые уже никак не мог объяснить, на этом прекратил экспериментирование, приняв это как некий глюк Excel, т.к. по другому никак не объяснить то, что результат выполнения одного и того-же кода при равных условиях разный, хочет работает, не хочет не работает.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема с ThisWorkbook.Path при открытии сетевого файла / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]