Word галлюцинирует, прошу помощи

Программирование на Visual Basic for Applications
Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Word галлюцинирует, прошу помощи

Сообщение Bagathur » 11.03.2010 (Чт) 13:56

Есть код, без проблем работавший несколько лет на разных компах и разных версия Офиса.
После перестановки 2003-ого Офиса на одном из компов начались непонятные события - сперва вылезала ошибка "Automation error", теперь вылезает ошибка №48 - "Error in loading DLL".

Собственно, сам код -
Код: Выделить всё
Dim objWord As New Word.Application
Dim objWordDoc As Object
    Dim wapp As Object
    Dim wdoc As Object

Public Sub ОткрытьДокументы()

FOpenable = False
Call CheckFile(fname)
If FOpenable = False Then Exit Sub
DoEvents

Select Case Right(fname, 4)
Case ".doc"
'Set objWord = CreateObject("Word.Application")
objWord.Visible = True 'Здесь вылетает ошибка
Set objWordDoc = objWord.Documents.Open(fname) 'Раньше ошибка была здесь
objWordDoc.Application.Activate


В коде никаких изменений не было, проблема на 99.9% связана с перестановкой офиса. Библиотеки 10-ого ворда и ActiveX подключены.
С чем связана проблема и какие есть пути её решения..?
'Til the blood on your hans is the blood of the King!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Word галлюцинирует, прошу помощи

Сообщение Денис » 11.03.2010 (Чт) 14:16

Как всегда, мусорим неуничтоженными объектами.
Вот исправленый код:
Код: Выделить всё
Option Explicit

Private objWord As New Word.Application
Private objWordDoc As Object
Private wapp As Object
Private wdoc As Object
Private FOpenable As Boolean

Private Const FName As String = "E:\Документы\none.doc"

Public Sub ОткрытьДокументы()

    FOpenable = False
    CheckFile (FName)
    If FOpenable = False Then Exit Sub
    DoEvents

    Select Case Right(FName, 4)
        Case ".doc"
            'Set objWord = CreateObject("Word.Application")
            objWord.Visible = True 'Здесь вылетает ошибка
            Set objWordDoc = objWord.Documents.Open(FName) 'Раньше ошибка была здесь
            objWordDoc.Application.Activate

    End Select

    'УНИЧТОЖАЕМ ССЫЛКИ НА СВОИ ОБЪЕКТЫ
    Set objWordDoc = Nothing
    Set objWord = Nothing

End Sub

Private Sub CheckFile(Path As String)
    FOpenable = True
End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

atom_nb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 06.03.2010 (Сб) 4:43

Re: Word галлюцинирует, прошу помощи

Сообщение atom_nb » 11.03.2010 (Чт) 15:13

А что у вас закоменчено
Код: Выделить всё
'Set objWord = CreateObject("Word.Application")

Помню случай, когда CreateObject( ) вообще в системе не работало.
Притом для любого офисного приложения. Но это было давно, во времена Windows 98 :lol: и решалось переустановкой

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Word галлюцинирует, прошу помощи

Сообщение Денис » 11.03.2010 (Чт) 15:39

atom_nb писал(а):А что у вас закоменчено

Полагаю, он отлаживает в VBA будущий скрипт. Когда наступит время, он сохранит код в *.VBS и откомментит эту строку.
Альтернативная точка зрения, он начал использовать ключевое слово New прямо в объявлении переменной, что упразднило использование CreateObject
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Re: Word галлюцинирует, прошу помощи

Сообщение Bagathur » 11.03.2010 (Чт) 17:00

Спасибо за помощь, вроде более/менее удалось разобраться :)

Дело не в "замусоривании" неуничтоженными объектами, если привести более полный код, то написано вот так:
Код: Выделить всё
Select Case Right(fname, 4)
Case ".doc"

objWord.Visible = True
Set objWordDoc = objWord.Documents.Open(fname)
objWordDoc.Application.Activate

    With objWord.Documents(objWordDoc)
   'Здесь ряд операций по обработке и записи данных
    End With
   
    ActiveDocument.SaveAs Filename:=sname
    objWordDoc.Close wdDoNotSaveChanges
    Set objWordDoc = Nothing
'Окно Ворда используется в последующих операциях


Откаменченное
Код: Выделить всё
'Set objWord = CreateObject("Word.Application")

возникло уже в ходе отладки при попытке сделать более позднее объявление объекта, чтобы исключить возможные проблемы с библиотеками, т.к. на компе обнаружились следы Офисов с 9 по 12ый включительно.
Как и писал Денис, в оригинальном коде стоит слово New в объявлении переменной.

В итоге многочасовых шаманств с бубнами оказалось, что файл с библиотекой 10-ого Ворда битый, причём нещадно. Очевидно - из-за кривой переустановки Офиса или кривых рук переустановщика (т.е., моих). Проблема решилась путём ручного копирования файла MSWORD.OLB с "нормального" компа на галлюцинирующий.
'Til the blood on your hans is the blood of the King!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList