|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Здравствуйте. Столкнулся с интересной ситуацией. Написал макрос для Excel, обрабатывающий документы Word. Макрос выводит диалог выбора документов (FileDialog), а потом обрабатывает то, что выбрали. Так вот, если в диалоге выбора документа (в Проводнике) включить предпросмотр (он работает), то дальше, при работе с Word, макрос вылетает с ошибками: либо "Automation error", либо "The remote server machine does not exist or is unvailable". Вся работа идет локально. Пробовал в Excel 2016, 2013. Если предпросмотр в Проводнике отключить, то ошибок вообще нет. Лечится добавлением сразу после диалога FileDialog какого-нибудь MsgBox, типа "Продолжить?". Ошибки сразу пропадают! Задолбался, пока допер, что это из-за Проводника :) Поисковики об проблеме молчат. Может есть идеи, как решить проблему правильно? Может я где-то торможу? :) Тестовый пример: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2018, 04:17 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождя, Протестировал, каких-либо проблем с automation не было. Переменные лучше называть так, чтобы была понятна их суть. И использовать префикс в названии, чтобы легче отличать тип переменных. Их принято группировать в начале процедуры или функции. Каждая процедура/функция должна иметь имя, отражающее суть действия. Лучше не комбинировать много действий в одной функции/процедуре. Код принято форматировать отступами, чтобы он легче читался. Массив заполняется, но ни как не используется. Для чего страдания? Наполнение массива можно несколько упросить, см. мой пример ниже. Ваш пример не содержит тестовых файлов, но кусок непонятно кода. Где собственно Excel? Где Word файлы, на которых этот кусок глючит? Манипуляции с открытием и закрытием Word вообще загадка столетия. И кроме того, If Not WOpened Then не имеет закрытия! В общем и целом это набор команд. С чего бы им работать? Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2018, 21:10 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
iMrTidyПротестировал, каких-либо проблем с automation не было.Тестировали два человека, на разных машинах: Win 10 + Office 2019. Win 7 + Office 2013, 2016. Ошибка появлялась всегда, при включении предпросмотра в Проводнике. В том числе в тестовом примере. Чтобы предпросмотр сработал, надо его включить, выбрать какой-то документ Word, а потом уже нажать "Открыть" (я про диалог макроса). Еще важный момент: на момент запуска макроса, Word должен быть закрыт. iMrTidyПеременные лучше называть так, чтобы была понятна их суть. И использовать префикс в названии, чтобы легче отличать тип переменных. Их принято группировать в начале процедуры или функции. Каждая процедура/функция должна иметь имя, отражающее суть действия. Лучше не комбинировать много действий в одной функции/процедуре. Код принято форматировать отступами, чтобы он легче читался.Тут как кому удобнее. Ничего плохого не вижу в объявлении переменной в месте первого использования, особенно при написании кода с листа. iMrTidyМассив заполняется, но ни как не используется. Для чего страдания?Массив сделан в попытке избавиться от ошибки, что бы можно было написать строку: Set DLG = Nothing iMrTidyВаш пример не содержит тестовых файлов, но кусок непонятно кода. Где собственно Excel? Где Word файлы, на которых этот кусок глючит?Ошибка случается и в тестовом примере. Но согласен, лучше когда с документами. Пример: Тестовый пример 2 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
iMrTidyИ кроме того, If Not WOpened Then не имеет закрытия!Гм. Зачем закрывать, если макрос не открывал Word? iMrTidyВ общем и целом это набор команд. С чего бы им работать?Есть как бы понятный заголовок "Тестовый пример" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 04:12 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождя, Именно так, как Вы описали я и тестировал. Да пишите код как хотите, я разбираться в макаронах не собираюсь. А за такой код просто увольняю, хе-хе. Цикл не нужен, чтобы Set DLG = Nothing. Первоначальный код сильно отличается от второго. Второй раз тратить время у не буду. Синтаксис требует, чтобы после If Not WOpened Then где-нибудь шло End If. Тестовый пример означает, что Вы выкладываете Ваш Excel и хотя бы один Word документ. Собственно те файлы, которые глючат. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 13:18 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Основная цель этой ветки - сообщить о глюке , чтобы народ время не терял. Надеялся, что найдется еще решение, как обойти глюк. iMrTidyПротестировал, каких-либо проблем с automation не было.Вот и чудно. Какой-никакой в тест :) iMrTidyЦикл не нужен, чтобы Set DLG = Nothing.А откуда имена файлов читать, после Set DLG = Nothing? iMrTidyПервоначальный код сильно отличается от второго.Код не отличается. Код дополнен циклом открыть-закрыть документ. iMrTidyСинтаксис требует, чтобы после If Not WOpened Then где-нибудь шло End If.Я использовал такую конструкцию: Код: vbnet 1. 2. 3.
iMrTidyТестовый пример означает, что Вы выкладываете Ваш Excel и хотя бы один Word документ. Собственно те файлы, которые глючатКуда тестовый пример вставишь, там и глючит. Проверено! Глючит код. Поэтому тестировать надо именно начисто. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 14:14 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождя, меня чуть больше эти строки напрягли: Код: plaintext 1. 2. 3.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
Использование With для диалога более рационально, т.к. сразу после End Wtih он самоуничтожается. Что далеко не всегда может произойти при = Nothing. Ну и еще момент непонятный мне изменил - совершенно не понял какой смысл вкладывался в эту конструкцию: Код: vbnet 1. 2. 3. 4.
учитывая, что само основное условие If Not WOpened Then вообще не обрабатывается... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 11:56 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
The_PristУ меня код работает без проблемОшибки случаются не в момент создания-удаления Word или документа, а при работе с ними. Если говорить о тестовом примере, то ошибка всегда в одной из этих строк: Код: vbnet 1. 2. 3.
Если у других ошибки нет, то я склоняюсь к какому-то внешнему фактору. Хотя, в толк не возьму, что это может быть. Сначала вылезла в Win 7, потом в Win 10, недавно установленной и почти чистой. Office разные, Windows разные. Тестовый макрос вставлялся в новую пустую книгу Excel. The_Pristменя чуть больше эти строки напрягли: Код: plaintext 1.
The_PristНу и еще момент непонятный мне изменил - совершенно не понял какой смысл вкладывался в эту конструкцию: Код: vbnet 1. 2. 3. 4.
учитывая, что само основное условие If Not WOpened Then вообще не обрабатывается...Я не пойму, чего все спрашивают об этом куске? :) Word по-любому в фоне не остается. Для этого и стоит WApp.Visible = True, которую вы зачем-то убрали, для Word открытого не макросом. Словами: если Word открыто макросом и если закрыты все документы, то закрываем Word. Давайте напишем так, если понятнее: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 13:01 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождяошибка всегда в одной из этих строк Что же Вы раньше сразу не указали те строки, на которых ошибка почти всегда появляется? Вы сами-то понимаете, что это один из ключевых факторов для решения задачи, нет? WApp.Visible = True - в ней тоже? или в любой из идущих далее? Если те, что далее - весьма неплохо бы убедиться, что сами файлы расположены в надежных источниках и не открываются в режиме защищенного просмотра. Именно он так же часто бывает причиной сбоев при попытке доступа к свойствам файлов. Так же ошибки подобного рода могут появляться, если в фоне или в памяти еще остался открытый экземпляр ворда с тем же документом. Еще можно проверить VBE -Tools -Referenсes на предмет битых ссылок. Чаще они сопровождаются другой ошибкой, но если методы ошибочных библиотек не принимают участия в ходе кода, то ошибки могут быть как раз именно с объектами автоматизации. И последний вариант: в момент выполнения появляется некое диалоговое окно(при открытии документа в том числе запрос на обновление неких ссылок или запросов, если они есть), которое требует действия пользователя. В итоге Word перестает отвечать на запросы Вашего кода, вот и ошибка. Попробуйте сразу после подключения/открытия Word поставить строку: Код: vbnet 1.
В общем попробуйте - вдруг чего поможет. Повторюсь - у меня на моих документах все работает без проблем вообще. Сын вождяЕсли пошли в эту сторону, то ReDim работает и без Dim, даже при Option Explicit именно поэтому Ваши извраты с объявлениями совершенно неясны. Сын вождячего все спрашивают об этом куске?потому что этот кусок демонстрирует недостаток логики кода. А это в свою очередь указывает на то, что и в дальнейшем, возможно, именно из-за таких недостатков в логике и возникают ошибки, на которые влияет может быть даже вовсе не FileDialog. А коды Вы нам какие-то нецелые и отличающиеся друг от друга подкидываете, что еще больше усложняет выявление корня проблемы. Вот почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 14:34 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
The_PristЧто же Вы раньше сразу не указали...Ребята, я все описал в первом посте. Ни если массив объявить по-вашему, ни If вместо ElseIf, ни на что не влияют. Абсолютно! По-моему, в любом коде :) Речь об ошибке "Automation error". Это когда объект уничтожается кем-то другим. Ошибка из-за того, что созданный макросом объект убивается включенным в Проводнике предпросмотром. The_Prist...А коды Вы нам какие-то нецелые и отличающиеся друг от друга подкидываете...Ошибка вылазит в любом из двух тестовых кодов. Повторюсь, второй код - это копия первого, со вставленным куском обработки документов. Не знаю, как это можно не заметить, код короткий :) Мной тест проводился абсолютно чистый! Повторю по шагам: 1. Загружаем Windows. 2. Запускаем Word, создаем новый документ, сохраняем, закрываем Word. 3. Запускаем Excel, создаем новую книгу, вставляем к нее тестовый код (любой) и запускаем его. 4. Появляется Проводник, где включаем предпросмотр, выбираем наш документ, видим его в окне предпросмотра, жмем "Да" (открыть). 5. Получаем сообщение об ошибке "Automation error". При включении предпросмотра - ошибка есть, при выключении - нет. Ошибка пропадает, при наличии какой-то паузы после диалога. Это или мой обход глюка с помощью MsgBox, или если поставить точку останова в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 16:01 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Прекрасно, автор просто хотел поделиться глюком, который у двоих пользователей не подтвердился. Все нуждающиеся к сведению приняли. Тему можно закрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 00:03 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
iMrTidyПрекрасно, автор просто хотел поделиться глюком, который у двоих пользователей не подтвердился. Все нуждающиеся к сведению приняли. Тему можно закрывать. Согласен. Да и кроме "у меня глюка нет" никакой информации о тестировании :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2019, 06:18 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождяя все описал в первом постеГде в первом посте хоть какое-то упоминание конкретных ошибочных строк? НИГДЕ. От Вас два человека пытаются вытянуть это, а Вы тут считаете до сих пор, что первый пост более чем достаточен? Вам в таком случае тоже сразу описали, что код из первого поста к ошибке не приводит, если добавить к нему любую обработку любого файла. Это уже может говорить о том, что либо мы добавляем в код что-то не то или не так, либо проблема реально в Вашем ПК. Но Вы почему-то упорно не хотите этого понять и все отсылаете и отсылаете фразой "я все описал". Решение вообще кому надо? Сын вождяОшибка вылазит в любом из двух тестовых кодовТолько в одном есть те самые строки в которых почти всегда с Ваших слов возникает ошибка, а в другом нет. Этот момент Вас вообще не смущает, когда Вы нам рассказываете про одинаковость кодов и возникновение в них обоих ошибок? И раз мы рассматриваем Ваши коды, которые вроде как работать должны "как есть"(если отключить предпросмотр и должны быть ошибки, если включить) - что за переменная такая V? Судя по тому, что она часть цикла по массиву А, то там полный путь к файлу. Но к чему спрашиваю - во втором коде Вы используете её дважды: Код: vbnet 1. 2. 3. 4. 5. 6.
Один раз она должна по идее содержать просто имя файла, второй же раз - полный путь к файлу. Но нигде по пути её значение не изменяется. Это значит, что при попытке узнать, открыт ли уже такой документ всегда будем получать WDoc Is Nothing. Либо код опять "от балды" скинут, либо в нем ошибка при попытке обращения к открытым документам и должно быть что-то вроде: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
А учитывая и другие косяки кода - опять же возникает логичный вопрос: это именно те коды, на которых появляется именно обсуждаемая ошибка или это все какие-то накиданные куски чего-то большего? Сын вождяникакой информации о тестированииА какую информацию о тестировании Вы ждете? Вроде написали - ошибок описанных не возникло. Надо видео Вам записать, что все работает? Можете тогда сначала Вы запишите видео, где не работает? И код приложите реальный и полный, еще лучше, если в файле? Кстати, в последнем посте я написал несколько возможных причин. Вы хоть что-то из этого применить попробовали? Я вот тоже не увидел никакой информации о тестировании и применение описанного. Только и пишите, что объявление массива и If-ы на это не влияют. Чего, впрочем, никто не отрицал. Я писал лишь, что подобные косяки в логике кода могут быть и в других местах, что и приводит потом к разным ошибкам. Без обид, но как-то так. Я считаю, что если проблема у Вас, то Вы и должны максимум усилий прикладывать для её решения, а не требовать от других каких-то результатов тестирования только на основании своего "я уже все описал". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 15:23 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
The_PristВы тут считаете до сих пор, что первый пост более чем достаточен?Да, более чем достаточен. Я считаю, что в коде нет ошибки, так как это просто пример, позволяющий увидеть глюк. The_PristТолько в одном есть те самые строки в которых почти всегда с Ваших слов возникает ошибка, а в другом нетВы опять невнимательны. Изучите лучше упомянутые мной строки и код. The_Prist Код: vbnet 1.
Здесь надо указывать полный путь. Word позволяет открыть два одноименных документа, из разных папок. Учтите, на будущее. The_PristА какую информацию о тестировании Вы ждете?Хотя бы версию Office и Windows. The_PristВы хоть что-то из этого применить попробовали? Я вот тоже не увидел никакой информации о тестировании и применение описанного. Только и пишите, что объявление массива и If-ы на это не влияют. Чего, впрочем, никто не отрицал. Я писал лишь, что подобные косяки в логике кода могут быть и в других местах, что и приводит потом к разным ошибкам.Мы по-разному понимаем суть проблемы. Я считаю, что это какой-то сбой, глюк и т. п. Потому, что уже перепробовал все, что смог придумать. Вы пытаетесь отыскать ошибку в коде. Это правильно, конечно, но в коде ничего особенного нет. Советы пробовал, благодарю, но пока решения нет. The_Pristсчитаю, что если проблема у Вас, то Вы и должны максимум усилий прикладывать для её решения, а не требовать от других каких-то результатов тестирования только на основании своего "я уже все описал".Проблема у меня и еще у одного человека, который собственно и сообщил о глюке. Я включил предпросмотр и тоже поймал глюк :) Нет ни логического решения проблемы, ни объяснения, только обход глюка, придуманный исходя из сообщения об ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 18:48 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождянадо указывать полный путьВаша правда - очень даже можно . Т.е. можно указать как полный путь, так и просто имя файла. Сын вождяХотя бы версию Office и WindowsWin 7, office 365 - полет нормальный. Уже как только не пробовал оба приведенных кода. И с модификациями и прям как есть с сайта. И с закрытым изначально Word и с открытым. С открытым выбираемым документом и закрытым. Ноль эффекта. Все отрабатывает до последней строки без ошибок. Сын вождяВы опять невнимательны. Изучите лучше упомянутые мной строки и кодВот здесь прям пять баллов! Извините, но вынужден просить ткнуть меня носом где в первом сообщении написано на каких конкретно строках в коде возникает ошибка. Т.е. указание на конкретные строки приведенного кода, а не слов типа "при обработке документов что-то происходит". В первом коде вообще ни одной строки обработки документов, если Вы сами этого еще не заметили. Там есть открытие Word. Вот и покажите там конкретную строку возникновения ошибки. Вам два человека отписались и просили больше инф-ции, на что Вы упорно в первое сообщение отсылаете. Странно, чесслово... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 19:58 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
The_PristСын вождянадо указывать полный путьВаша правда - очень даже можно . Т.е. можно указать как полный путь, так и просто имя файлаМожно много чего, я написал как правильно :) The_PristСын вождяВы опять невнимательны. Изучите лучше упомянутые мной строки и кодВот здесь прям пять баллов! Извините, но вынужден просить ткнуть меня носом...Написано о строке WApp.Visible = True, упомянутой мной выше как место ошибки, которая есть в обоих тестовых кодах. Как и раньше, считаю, что код примера не имеет значения. Вы можете написать свой код, запускающий Word и открывающий документ и хоть что-то делающий с ними. Суть в ошибке. Она никак не вызвана кодом, а каким-то другим фактором. Макрос сам ну нигде не "теряет" объекты, но тем не менее возникает ошибка "Automation error". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 20:28 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождя, Дабы Вы не жаловались на скудную информацию о тестах. Когда тестировал, то использовал Win7 + Office 2010, 2013, 2016 и Win10 + Office 2013, 365. Версии патчей Вам тоже нужны? Может логи Винды? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2019, 14:06 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Уф. Подумал, подумал, и нашел причину – это Word, почти :) Если в Word установлена какая-то надстройка, то ошибка есть. Если очистить папку Startup, то ошибка пропадает. Попробовал кучу надстроек, что у меня есть, и dot, и dotm. При наличии любой в Startup – есть ошибка. Выходит, предпросмотр зачем-то грузит надстройки, что и приводит к сбою. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2019, 15:49 |
|
Глюк при включении предпросмотра в Проводнике
|
|||
---|---|---|---|
#18+
Сын вождя, еще о тестах(раз пошел разговор): если ошибка проявляется только у Вас и еще одного человека, не бывает лишним проверить какие надстройки подключены(как COM, так и шаблоны) у обоих. Так же проверить подключенные в Tools -References. Если есть что-то одинаковое(кроме стандартных библиотек: Visual Basic for Applications, Microsoft Office Object library, Microsoft Word Object library, OLE Automation) - к этому присмотреться в первую очередь. Оптимально отключить все сторонние надстройки и шаблоны. Из normal при этом лучше убрать все коды. Особое внимание уделить надстройкам COM и любым надстройкам, использующим API-функции работы с любыми диалогами - они могут влиять на эти вещи(да и вообще любые API, в принципе). В общем самый верный вариант отключить полностью все, что подключено к офису и чего при его стандартной установке быть не должно. И попробовать уже реально вчистую. Если есть возможность - проверить полностью на чистом офисе и ПК после переустановки ОС. Не подключая к нему ничего лишнего вообще. Просто создать документ, вставить код и проверить. Если проблема не исчезнет - значит дело все же в конфликте офиса и ОС, притом возможно очень специфичная и проявляющаяся на конкретных сборках или обновлениях(здесь уже надо будет собирать статистику какая сборка у Вас и другого человека с этой проблемой и т.п.). Такое тоже может быть. Если же проблема исчезнет - ответ очевиден: проблема в какой-то надстройке или шаблоне, подключаемым при запуске Word. Т.к. я Word не использую столь активно, чтобы там были какие-то надстройки постоянно - то у меня ничего лишнего вообще нет нигде: в references только стандарт(Visual Basic for Applications, Microsoft Office Object library, Microsoft Word Object library, OLE Automation), никаких надстроек и сторонних шаблонов нет вообще. Normal чистый, без макросов. Так же можно попробовать работу в предпросмотре и других типов файлов, но которые не связаны с Word - это даст информацию о том, в Word-е ли вообще дело или как минимум не только в нем. P.S. Сын вождяНаписано о строке WApp.Visible = True, упомянутой мной выше как место ошибкиэто упомянуто несколькими постами позже, но никак не в первом :) Так что тыканье какое-то некорректное получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2019, 15:54 |
|
|
start [/forum/topic.php?fid=61&tid=2172159]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 154ms |
0 / 0 |