Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
Здравствуйте.

Столкнулся с интересной ситуацией. Написал макрос для Excel, обрабатывающий документы Word. Макрос выводит диалог выбора документов (FileDialog), а потом обрабатывает то, что выбрали. Так вот, если в диалоге выбора документа (в Проводнике) включить предпросмотр (он работает), то дальше, при работе с Word, макрос вылетает с ошибками: либо "Automation error", либо "The remote server machine does not exist or is unvailable". Вся работа идет локально. Пробовал в Excel 2016, 2013.

Если предпросмотр в Проводнике отключить, то ошибок вообще нет.

Лечится добавлением сразу после диалога FileDialog какого-нибудь MsgBox, типа "Продолжить?". Ошибки сразу пропадают!

Задолбался, пока допер, что это из-за Проводника :) Поисковики об проблеме молчат.

Может есть идеи, как решить проблему правильно? Может я где-то торможу? :)

Тестовый пример:
Sub A() ' ТЕСТ: включите предпросмотр в Проводнике
    ' диалог выбора файлов
Dim DLG As Office.FileDialog
    Set DLG = Excel.Application.FileDialog(msoFileDialogFilePicker)
    DLG.AllowMultiSelect = True
    If DLG.Show <> -1 Then Exit Sub
    ' обход глюка
    'If MsgBox("Продолжить?", vbOKCancel) <> vbOK Then Exit Sub
    ' писок файлов
Dim A As Variant
Dim i As Long
    i = DLG.SelectedItems.Count
    ReDim A(1 To i) As String
    Do
        A(i) = DLG.SelectedItems(i)
        i = i - 1
    Loop While i > 0
    Set DLG = Nothing
    ' открываем Word
    VBA.DoEvents
Dim WApp As Object
Dim WOpened As Boolean
    On Error Resume Next
    Set WApp = VBA.GetObject(Class:="Word.Application")
    On Error GoTo 0
    WOpened = WApp Is Nothing
    If WOpened Then Set WApp = VBA.CreateObject(Class:="Word.Application")
    WApp.Visible = True
    ' обработка документов
    ' ....
    ' закрываем Word
    VBA.DoEvents
    If Not WOpened Then
    ElseIf WApp.Documents.Count <= 0 Then
        WApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges
    End If
    Set WApp = Nothing
End Sub
29 дек 18, 04:17    [21776160]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
iMrTidy
Member

Откуда:
Сообщений: 702
Сын вождя,

Протестировал, каких-либо проблем с automation не было.

Переменные лучше называть так, чтобы была понятна их суть. И использовать префикс в названии, чтобы легче отличать тип переменных. Их принято группировать в начале процедуры или функции. Каждая процедура/функция должна иметь имя, отражающее суть действия. Лучше не комбинировать много действий в одной функции/процедуре. Код принято форматировать отступами, чтобы он легче читался.

Массив заполняется, но ни как не используется. Для чего страдания?

Наполнение массива можно несколько упросить, см. мой пример ниже.

Ваш пример не содержит тестовых файлов, но кусок непонятно кода. Где собственно Excel? Где Word файлы, на которых этот кусок глючит?

Манипуляции с открытием и закрытием Word вообще загадка столетия.

И кроме того, If Not WOpened Then не имеет закрытия!

В общем и целом это набор команд. С чего бы им работать?

For i = 1 To oDlg.SelectedItems.Count
    arrSChosenFiles(i) = oDlg.SelectedItems(i)
Next
30 дек 18, 21:10    [21777019]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
iMrTidy
Протестировал, каких-либо проблем с automation не было.
Тестировали два человека, на разных машинах: Win 10 + Office 2019. Win 7 + Office 2013, 2016. Ошибка появлялась всегда, при включении предпросмотра в Проводнике. В том числе в тестовом примере. Чтобы предпросмотр сработал, надо его включить, выбрать какой-то документ Word, а потом уже нажать "Открыть" (я про диалог макроса). Еще важный момент: на момент запуска макроса, Word должен быть закрыт.
iMrTidy
Переменные лучше называть так, чтобы была понятна их суть. И использовать префикс в названии, чтобы легче отличать тип переменных. Их принято группировать в начале процедуры или функции. Каждая процедура/функция должна иметь имя, отражающее суть действия. Лучше не комбинировать много действий в одной функции/процедуре. Код принято форматировать отступами, чтобы он легче читался.
Тут как кому удобнее. Ничего плохого не вижу в объявлении переменной в месте первого использования, особенно при написании кода с листа.
iMrTidy
Массив заполняется, но ни как не используется. Для чего страдания?
Массив сделан в попытке избавиться от ошибки, что бы можно было написать строку:
Set DLG = Nothing
iMrTidy
Ваш пример не содержит тестовых файлов, но кусок непонятно кода. Где собственно Excel? Где Word файлы, на которых этот кусок глючит?
Ошибка случается и в тестовом примере. Но согласен, лучше когда с документами. Пример:
+ Тестовый пример 2
Sub A() ' ТЕСТ: включите предпросмотр в Проводнике
    ' диалог выбора файлов
Dim DLG As Office.FileDialog
    Set DLG = Excel.Application.FileDialog(msoFileDialogFilePicker)
    DLG.AllowMultiSelect = True
    If DLG.Show <> -1 Then Exit Sub
    ' обход глюка
    'If MsgBox("Продолжить?", vbOKCancel) <> vbOK Then Exit Sub
    ' писок файлов
Dim A As Variant
Dim i As Long
    i = DLG.SelectedItems.Count
    ReDim A(1 To i) As String
    Do
        A(i) = DLG.SelectedItems(i)
        i = i - 1
    Loop While i > 0
    Set DLG = Nothing
    ' открываем Word
    VBA.DoEvents
Dim WApp As Object
Dim WOpened As Boolean
    On Error Resume Next
    Set WApp = VBA.GetObject(Class:="Word.Application")
    On Error GoTo 0
    WOpened = WApp Is Nothing
    If WOpened Then Set WApp = VBA.CreateObject(Class:="Word.Application")
    WApp.Visible = True
    ' обработка документов
Dim V As Variant
    For Each V In A
        GoSub sub_Document
    Next V
    ' закрываем Word
    VBA.DoEvents
    If Not WOpened Then
    ElseIf WApp.Documents.Count <= 0 Then
        WApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges
    End If
    Set WApp = Nothing
    Exit Sub
    
sub_Document: ' обработка документа с именем V
    ' открываем документ
Dim WDoc As Object
    VBA.DoEvents
    On Error Resume Next
    Set WDoc = WApp.Documents(V)
    On Error GoTo 0
Dim bDocOpened As Boolean
    bDocOpened = WDoc Is Nothing
    If bDocOpened Then Set WDoc = WApp.Documents.Open(Filename:=V)
    WDoc.ActiveWindow.View = 1 ' wdNormalView
    WDoc.ActiveWindow.View.ShowFieldCodes = False
    ' читаем из документа
    '...
    ' закрываем документ
    VBA.DoEvents
    If bDocOpened Then
        WDoc.Saved = True ' обход ошибки
        WDoc.Close SaveChanges:=0 ' wdDoNotSaveChanges
    End If
    Set WDoc = Nothing
    Return
End Sub
iMrTidy
Манипуляции с открытием и закрытием Word вообще загадка столетия.
Поясните?
iMrTidy
И кроме того, If Not WOpened Then не имеет закрытия!
Гм. Зачем закрывать, если макрос не открывал Word?
iMrTidy
В общем и целом это набор команд. С чего бы им работать?
Есть как бы понятный заголовок "Тестовый пример" :)
31 дек 18, 04:12    [21777074]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
iMrTidy
Member

Откуда:
Сообщений: 702
Сын вождя,

Именно так, как Вы описали я и тестировал.
Да пишите код как хотите, я разбираться в макаронах не собираюсь. А за такой код просто увольняю, хе-хе.
Цикл не нужен, чтобы Set DLG = Nothing.
Первоначальный код сильно отличается от второго. Второй раз тратить время у не буду.
Синтаксис требует, чтобы после If Not WOpened Then где-нибудь шло End If.
Тестовый пример означает, что Вы выкладываете Ваш Excel и хотя бы один Word документ. Собственно те файлы, которые глючат.
Удачи!
31 дек 18, 13:18    [21777123]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
Основная цель этой ветки - сообщить о глюке, чтобы народ время не терял.
Надеялся, что найдется еще решение, как обойти глюк.
iMrTidy
Протестировал, каких-либо проблем с automation не было.
Вот и чудно. Какой-никакой в тест :)
iMrTidy
Цикл не нужен, чтобы Set DLG = Nothing.
А откуда имена файлов читать, после Set DLG = Nothing?
iMrTidy
Первоначальный код сильно отличается от второго.
Код не отличается. Код дополнен циклом открыть-закрыть документ.
iMrTidy
Синтаксис требует, чтобы после If Not WOpened Then где-нибудь шло End If.
Я использовал такую конструкцию:
If ... Then
ElseIf ... Then
End If

iMrTidy
Тестовый пример означает, что Вы выкладываете Ваш Excel и хотя бы один Word документ. Собственно те файлы, которые глючат
Куда тестовый пример вставишь, там и глючит. Проверено!
Глючит код. Поэтому тестировать надо именно начисто.
31 дек 18, 14:14    [21777134]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1808
Сын вождя,

меня чуть больше эти строки напрягли:
Dim A As Variant
Dim i As Long
i = DLG.SelectedItems.Count
ReDim A(1 To i) As String
Зачем объявлять массив сначала без типа, а потом редимить с переназначением типа? Почему не сразу хотя бы как массив определить? Но проблема явно не в этом. У меня код работает без проблем. Но есть пара идей.
Sub A() ' ТЕСТ: включите предпросмотр в Проводнике
    ' диалог выбора файлов
    Dim A() As Variant
    Dim i As Long
    With Excel.Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        If .Show = False Then Exit Sub
        ReDim A(1 To .SelectedItems.Count)
        For i = 1 To .SelectedItems.Count
            A(i) = .SelectedItems(i)
        Next
    End With
    ' открываем Word
    VBA.DoEvents
    Dim WApp As Object
    Dim WOpened As Boolean
    On Error Resume Next
    Set WApp = VBA.GetObject(Class:="Word.Application")
    If WApp Is Nothing Then
        Set WApp = VBA.CreateObject(Class:="Word.Application")
        WApp.Visible = True
    Else
        WOpened = True
    End If
    On Error GoTo 0
    If WApp Is Nothing Then
        MsgBox "Не удалось подключиться к Word", vbInformation
        Exit Sub
    End If
    
    ' обработка документов
    ' ....
    ' закрываем Word
    VBA.DoEvents
    If Not WOpened Then 'Word был открыт до нас
        If WApp.Documents.Count <= 0 Then
            WApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges
        End If
    End If
    Set WApp = Nothing
End Sub

Использование With для диалога более рационально, т.к. сразу после End Wtih он самоуничтожается. Что далеко не всегда может произойти при = Nothing. Ну и еще момент непонятный мне изменил - совершенно не понял какой смысл вкладывался в эту конструкцию:
If Not WOpened Then
    ElseIf WApp.Documents.Count <= 0 Then
        WApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges
    End If

учитывая, что само основное условие If Not WOpened Then вообще не обрабатывается...
3 янв 19, 11:56    [21777840]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
The_Prist
У меня код работает без проблем
Ошибки случаются не в момент создания-удаления Word или документа, а при работе с ними. Если говорить о тестовом примере, то ошибка всегда в одной из этих строк:
WApp.Visible = True
WDoc.ActiveWindow.View = 1 
WDoc.ActiveWindow.View.ShowFieldCodes = False
Если у других ошибки нет, то я склоняюсь к какому-то внешнему фактору. Хотя, в толк не возьму, что это может быть. Сначала вылезла в Win 7, потом в Win 10, недавно установленной и почти чистой. Office разные, Windows разные. Тестовый макрос вставлялся в новую пустую книгу Excel.

The_Prist
меня чуть больше эти строки напрягли:
Dim A As Variant
ReDim A(1 To i) As String
Зачем объявлять массив сначала без типа, а потом редимить с переназначением типа? Почему не сразу хотя бы как массив определить? Но проблема явно не в этом.
Если пошли в эту сторону, то ReDim работает и без Dim, даже при Option Explicit. То есть, объявление массива можно опустить, если есть ReDim. Но лучше оставить тему оптимизации, на ошибку это не влияет.

The_Prist
Ну и еще момент непонятный мне изменил - совершенно не понял какой смысл вкладывался в эту конструкцию:
If Not WOpened Then
    ElseIf WApp.Documents.Count <= 0 Then
        WApp.Quit SaveChanges:=0 ' wdDoNotSaveChanges
    End If

учитывая, что само основное условие If Not WOpened Then вообще не обрабатывается...
Я не пойму, чего все спрашивают об этом куске? :) Word по-любому в фоне не остается. Для этого и стоит WApp.Visible = True, которую вы зачем-то убрали, для Word открытого не макросом.
Словами: если Word открыто макросом и если закрыты все документы, то закрываем Word. Давайте напишем так, если понятнее:
If WOpened Then
    If WApp.Documents.Count = 0 Then WApp.Quit 
End If
3 янв 19, 13:01    [21777862]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1808
Сын вождя
ошибка всегда в одной из этих строк

Что же Вы раньше сразу не указали те строки, на которых ошибка почти всегда появляется? Вы сами-то понимаете, что это один из ключевых факторов для решения задачи, нет?
WApp.Visible = True - в ней тоже? или в любой из идущих далее?
Если те, что далее - весьма неплохо бы убедиться, что сами файлы расположены в надежных источниках и не открываются в режиме защищенного просмотра. Именно он так же часто бывает причиной сбоев при попытке доступа к свойствам файлов.

Так же ошибки подобного рода могут появляться, если в фоне или в памяти еще остался открытый экземпляр ворда с тем же документом.
Еще можно проверить VBE -Tools -Referenсes на предмет битых ссылок. Чаще они сопровождаются другой ошибкой, но если методы ошибочных библиотек не принимают участия в ходе кода, то ошибки могут быть как раз именно с объектами автоматизации.
И последний вариант: в момент выполнения появляется некое диалоговое окно(при открытии документа в том числе запрос на обновление неких ссылок или запросов, если они есть), которое требует действия пользователя. В итоге Word перестает отвечать на запросы Вашего кода, вот и ошибка. Попробуйте сразу после подключения/открытия Word поставить строку:
WApp.DisplayAlerts = False


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

Сын вождя
Если пошли в эту сторону, то ReDim работает и без Dim, даже при Option Explicit

именно поэтому Ваши извраты с объявлениями совершенно неясны.

Сын вождя
чего все спрашивают об этом куске?
потому что этот кусок демонстрирует недостаток логики кода. А это в свою очередь указывает на то, что и в дальнейшем, возможно, именно из-за таких недостатков в логике и возникают ошибки, на которые влияет может быть даже вовсе не FileDialog. А коды Вы нам какие-то нецелые и отличающиеся друг от друга подкидываете, что еще больше усложняет выявление корня проблемы. Вот почему.
3 янв 19, 14:34    [21777893]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
The_Prist
Что же Вы раньше сразу не указали...
Ребята, я все описал в первом посте. Ни если массив объявить по-вашему, ни If вместо ElseIf, ни на что не влияют. Абсолютно! По-моему, в любом коде :)

Речь об ошибке "Automation error". Это когда объект уничтожается кем-то другим. Ошибка из-за того, что созданный макросом объект убивается включенным в Проводнике предпросмотром.

The_Prist
...А коды Вы нам какие-то нецелые и отличающиеся друг от друга подкидываете...
Ошибка вылазит в любом из двух тестовых кодов. Повторюсь, второй код - это копия первого, со вставленным куском обработки документов. Не знаю, как это можно не заметить, код короткий :)

Мной тест проводился абсолютно чистый! Повторю по шагам:
1. Загружаем Windows.
2. Запускаем Word, создаем новый документ, сохраняем, закрываем Word.
3. Запускаем Excel, создаем новую книгу, вставляем к нее тестовый код (любой) и запускаем его.
4. Появляется Проводник, где включаем предпросмотр, выбираем наш документ, видим его в окне предпросмотра, жмем "Да" (открыть).
5. Получаем сообщение об ошибке "Automation error".

При включении предпросмотра - ошибка есть, при выключении - нет. Ошибка пропадает, при наличии какой-то паузы после диалога. Это или мой обход глюка с помощью MsgBox, или если поставить точку останова в коде.
3 янв 19, 16:01    [21777922]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
iMrTidy
Member

Откуда:
Сообщений: 702
Прекрасно, автор просто хотел поделиться глюком, который у двоих пользователей не подтвердился. Все нуждающиеся к сведению приняли. Тему можно закрывать.
4 янв 19, 00:03    [21778112]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
iMrTidy
Прекрасно, автор просто хотел поделиться глюком, который у двоих пользователей не подтвердился. Все нуждающиеся к сведению приняли. Тему можно закрывать.

Согласен. Да и кроме "у меня глюка нет" никакой информации о тестировании :)
4 янв 19, 06:18    [21778213]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1808
Сын вождя
я все описал в первом посте
Где в первом посте хоть какое-то упоминание конкретных ошибочных строк? НИГДЕ. От Вас два человека пытаются вытянуть это, а Вы тут считаете до сих пор, что первый пост более чем достаточен? Вам в таком случае тоже сразу описали, что код из первого поста к ошибке не приводит, если добавить к нему любую обработку любого файла. Это уже может говорить о том, что либо мы добавляем в код что-то не то или не так, либо проблема реально в Вашем ПК. Но Вы почему-то упорно не хотите этого понять и все отсылаете и отсылаете фразой "я все описал". Решение вообще кому надо?
Сын вождя
Ошибка вылазит в любом из двух тестовых кодов
Только в одном есть те самые строки в которых почти всегда с Ваших слов возникает ошибка, а в другом нет. Этот момент Вас вообще не смущает, когда Вы нам рассказываете про одинаковость кодов и возникновение в них обоих ошибок?

И раз мы рассматриваем Ваши коды, которые вроде как работать должны "как есть"(если отключить предпросмотр и должны быть ошибки, если включить) - что за переменная такая V? Судя по тому, что она часть цикла по массиву А, то там полный путь к файлу. Но к чему спрашиваю - во втором коде Вы используете её дважды:
On Error Resume Next
    Set WDoc = WApp.Documents(V) 'здесь должно быть просто имя файла с расширением
    On Error GoTo 0
Dim bDocOpened As Boolean
    bDocOpened = WDoc Is Nothing
    If bDocOpened Then Set WDoc = WApp.Documents.Open(Filename:=V) 'здесь должен быть полный путь к файлу

Один раз она должна по идее содержать просто имя файла, второй же раз - полный путь к файлу. Но нигде по пути её значение не изменяется. Это значит, что при попытке узнать, открыт ли уже такой документ всегда будем получать WDoc Is Nothing. Либо код опять "от балды" скинут, либо в нем ошибка при попытке обращения к открытым документам и должно быть что-то вроде:
Dim s As String
    On Error Resume Next
    s = Dir(V, 16) 'получаем только имя файла
    Set WDoc = Nothing 'на всякий случай обнуляем
    Set WDoc = WApp.Documents(s)
    If WDoc Is Nothing Then
        Set WDoc = WApp.Documents.Open(Filename:=V)
    End If

А учитывая и другие косяки кода - опять же возникает логичный вопрос: это именно те коды, на которых появляется именно обсуждаемая ошибка или это все какие-то накиданные куски чего-то большего?
Сын вождя
никакой информации о тестировании
А какую информацию о тестировании Вы ждете? Вроде написали - ошибок описанных не возникло. Надо видео Вам записать, что все работает? Можете тогда сначала Вы запишите видео, где не работает? И код приложите реальный и полный, еще лучше, если в файле?

Кстати, в последнем посте я написал несколько возможных причин. Вы хоть что-то из этого применить попробовали? Я вот тоже не увидел никакой информации о тестировании и применение описанного. Только и пишите, что объявление массива и If-ы на это не влияют. Чего, впрочем, никто не отрицал. Я писал лишь, что подобные косяки в логике кода могут быть и в других местах, что и приводит потом к разным ошибкам.

Без обид, но как-то так. Я считаю, что если проблема у Вас, то Вы и должны максимум усилий прикладывать для её решения, а не требовать от других каких-то результатов тестирования только на основании своего "я уже все описал".
5 янв 19, 15:23    [21778752]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
The_Prist
Вы тут считаете до сих пор, что первый пост более чем достаточен?
Да, более чем достаточен. Я считаю, что в коде нет ошибки, так как это просто пример, позволяющий увидеть глюк.

The_Prist
Только в одном есть те самые строки в которых почти всегда с Ваших слов возникает ошибка, а в другом нет
Вы опять невнимательны. Изучите лучше упомянутые мной строки и код.

The_Prist
Set WDoc = WApp.Documents(V) 'здесь должно быть просто имя файла с расширением
Здесь надо указывать полный путь. Word позволяет открыть два одноименных документа, из разных папок. Учтите, на будущее.

The_Prist
А какую информацию о тестировании Вы ждете?
Хотя бы версию Office и Windows.

The_Prist
Вы хоть что-то из этого применить попробовали? Я вот тоже не увидел никакой информации о тестировании и применение описанного. Только и пишите, что объявление массива и If-ы на это не влияют. Чего, впрочем, никто не отрицал. Я писал лишь, что подобные косяки в логике кода могут быть и в других местах, что и приводит потом к разным ошибкам.
Мы по-разному понимаем суть проблемы. Я считаю, что это какой-то сбой, глюк и т. п. Потому, что уже перепробовал все, что смог придумать. Вы пытаетесь отыскать ошибку в коде. Это правильно, конечно, но в коде ничего особенного нет. Советы пробовал, благодарю, но пока решения нет.

The_Prist
считаю, что если проблема у Вас, то Вы и должны максимум усилий прикладывать для её решения, а не требовать от других каких-то результатов тестирования только на основании своего "я уже все описал".
Проблема у меня и еще у одного человека, который собственно и сообщил о глюке. Я включил предпросмотр и тоже поймал глюк :)
Нет ни логического решения проблемы, ни объяснения, только обход глюка, придуманный исходя из сообщения об ошибке.
5 янв 19, 18:48    [21778842]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1808
Сын вождя
надо указывать полный путь
Ваша правда - очень даже можно. Т.е. можно указать как полный путь, так и просто имя файла.

Сын вождя
Хотя бы версию Office и Windows
Win 7, office 365 - полет нормальный. Уже как только не пробовал оба приведенных кода. И с модификациями и прям как есть с сайта. И с закрытым изначально Word и с открытым. С открытым выбираемым документом и закрытым. Ноль эффекта. Все отрабатывает до последней строки без ошибок.

Сын вождя
Вы опять невнимательны. Изучите лучше упомянутые мной строки и код
Вот здесь прям пять баллов! Извините, но вынужден просить ткнуть меня носом где в первом сообщении написано на каких конкретно строках в коде возникает ошибка. Т.е. указание на конкретные строки приведенного кода, а не слов типа "при обработке документов что-то происходит". В первом коде вообще ни одной строки обработки документов, если Вы сами этого еще не заметили. Там есть открытие Word. Вот и покажите там конкретную строку возникновения ошибки. Вам два человека отписались и просили больше инф-ции, на что Вы упорно в первое сообщение отсылаете. Странно, чесслово...
5 янв 19, 19:58    [21778889]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
The_Prist
Сын вождя
надо указывать полный путь
Ваша правда - очень даже можно. Т.е. можно указать как полный путь, так и просто имя файла
Можно много чего, я написал как правильно :)

The_Prist
Сын вождя
Вы опять невнимательны. Изучите лучше упомянутые мной строки и код
Вот здесь прям пять баллов! Извините, но вынужден просить ткнуть меня носом...
Написано о строке WApp.Visible = True, упомянутой мной выше как место ошибки, которая есть в обоих тестовых кодах.

Как и раньше, считаю, что код примера не имеет значения. Вы можете написать свой код, запускающий Word и открывающий документ и хоть что-то делающий с ними. Суть в ошибке. Она никак не вызвана кодом, а каким-то другим фактором. Макрос сам ну нигде не "теряет" объекты, но тем не менее возникает ошибка "Automation error".
5 янв 19, 20:28    [21778918]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
iMrTidy
Member

Откуда:
Сообщений: 702
Сын вождя,

Дабы Вы не жаловались на скудную информацию о тестах. Когда тестировал, то использовал Win7 + Office 2010, 2013, 2016 и Win10 + Office 2013, 365. Версии патчей Вам тоже нужны? Может логи Винды?
6 янв 19, 14:06    [21779108]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
Сын вождя
Member

Откуда: mtdmacro.ru
Сообщений: 175
Уф. Подумал, подумал, и нашел причину – это Word, почти :)

Если в Word установлена какая-то надстройка, то ошибка есть. Если очистить папку Startup, то ошибка пропадает. Попробовал кучу надстроек, что у меня есть, и dot, и dotm. При наличии любой в Startup – есть ошибка.

Выходит, предпросмотр зачем-то грузит надстройки, что и приводит к сбою.
6 янв 19, 15:49    [21779140]     Ответить | Цитировать Сообщить модератору
 Re: Глюк при включении предпросмотра в Проводнике  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1808
Сын вождя,

еще о тестах(раз пошел разговор): если ошибка проявляется только у Вас и еще одного человека, не бывает лишним проверить какие надстройки подключены(как 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, упомянутой мной выше как место ошибки
это упомянуто несколькими постами позже, но никак не в первом :) Так что тыканье какое-то некорректное получилось
6 янв 19, 15:54    [21779142]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить