powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема с ThisWorkbook.Path при открытии сетевого файла
13 сообщений из 13, страница 1 из 1
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39322811
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процессе написания данной темы проблему решил, но может кому-то пригодиться.

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

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

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

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

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


2. сохранить книгу, отключив уведомления, до использования пути.
...
Рейтинг: 0 / 0
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39324077
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristДа, еще момент: если у Вас файл открывается в защищенном режиме - то ничего не останется, как разрешить редактирование и перезапустить файл.
Пункт 2 моего предложения безопаснее, чем цикл. Сохранить файл в любом случае дольше чем открыть.
...
Рейтинг: 0 / 0
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39324081
Bobgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon Playerб) В 1% случаев (цифры условные) по непонятной причине сразу-же происходит автозапуск макросов при одних и тех-же параметрах и условиях и функция ThisWorkbook.path выдаёт пустую строку, а панель "Включить содержимое" появляется уже после выполнения макроса. А уже при повторном перезапуске выдает нормальный путь.
.
Макросы не должны работать, пока они не будут разрешены. Значит код в другой книге, для которой макросы уже разрешили.
...
Рейтинг: 0 / 0
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39334601
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobgos,
Нет, книга единственная открывается.
...
Рейтинг: 0 / 0
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39337574
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая проблема может происходить и на локальном диске, и это проявлялось с версии 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
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39337580
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVIЗдесь с помощью Call Application. Ready (Now, Процедура)
Опечаьтка, должно быть: Здесь с помощью Call Application. OnTime (Now, Процедура)
...
Рейтинг: 0 / 0
Проблема с ThisWorkbook.Path при открытии сетевого файла
    #39346524
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZVI,

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


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