VB и Word (Ошибка 462)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

VB и Word (Ошибка 462)

Сообщение Diamock » 15.05.2011 (Вс) 8:47

Здравствуйте Уважаемые!

Создаю класс для работы с Word.

Код класса WordClass.
Код: Выделить всё
Option Explicit
   
'#######################################################################################
'# Объявление переменных
'#######################################################################################
    Dim WordApp As Object   '# Объектная переменная объекта - Word
    Dim DocWord As Object   '# Объектная переменная объекта - документ
'    Dim TabWord As Object   '# Объектная переменная объекта - таблица
'#######################################################################################

Private Sub Class_Initialize()
    '# Создание объекта - Word
    Set WordApp = CreateObject("Word.Application")
End Sub

'########################################################################################
'# Процедура проверки валидности файла
'########################################################################################
Private Function FileExist(FileName As String) As Boolean
On Error GoTo ErrFileExist
    If Dir$(FileName) = vbNullString Then
        FileExist = False
    Else
        FileExist = True
    End If
Exit Function

ErrFileExist: FileExist = False
End Function
'########################################################################################

'########################################################################################
'# Процедура создания докумета Word
'########################################################################################
Public Sub CreateWordDocument(FileName As String)
   
    '# Создание объекта - документ
    Set DocWord = WordApp.Documents.Add
   
    '# Сохранение документ Word
    DocWord.SaveAs (FileName)

    '# Закрытие документа Word
    WordApp.Quit True
    '# Уничтожение объекта - документ
    Set DocWord = Nothing
End Sub
'########################################################################################

Private Sub Class_Terminate()
    '# Уничтожение объекта - Word
    Set WordApp = Nothing
End Sub

Код в форме.
Код: Выделить всё
Option Explicit

Dim wc As New WordClass

Private Sub cmdCreateWordDoc_Click()

Dim i As Integer
    i = Val(txtDocNumber.Text)
   
    wc.CreateWordDocument App.Path & "\DocExemple" & i & ".doc"
   
    txtDocNumber.Text = i + 1
End Sub


При нажатии на на кнопку без проблем создаётся документ. При повторном нажатии, ошибка 462.
В поиске по форуму, я нашёл несколько ответов, но что-то видимо не понял. Объясните в чём причина ошибки.
И есть ли разница, при обращении к Word если он подключен через References или, создание переменной идёт с помощью CreateObgect?

С уважением...
P.S. Проект во вложении.
Вложения
WordClassExemple.zip
(2.41 Кб) Скачиваний: 47
In der Beschrankung zeigt sich erst der Meister
Графоманю...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: VB и Word (Ошибка 462)

Сообщение alibek » 15.05.2011 (Вс) 12:21

Есть простое правило — убирай за собой, не трогай то, что не твое.
WordApp.Quit зачем там, где он есть?
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB и Word (Ошибка 462)

Сообщение Хакер » 15.05.2011 (Вс) 12:21

Diamock писал(а):И есть ли разница, при обращении к Word если он подключен через References или, создание переменной идёт с помощью CreateObgect?

Как же это надоело.
Это две разных и при том не взаимоисключающих вещи.
Никакого «создания переменной с помощью CreateObject» не существует в природе. Если и считать, что создание переменной существует (подразумевая при этом локальную переменную, которой как бы не существует, когда нет стекового фрейма вызова), тот этот процесс заключается в отмотке регистра ESP на достаточную величину.

CreateObject это альтернатива New ...
Альтернативой использованию типов из TLB является неиспользование типов из TLB, а использование типа Object. Разумеется, речь идёт о типах, олицетворяющих интерфейсы.

К сожалению, для New требуеются объявленные CoClass-ы (именно их список вываливается после написания кл. слова New), а объявить уже существующий (где-то) CoClass в VB (пока ;) ) можно только через подключение TLB. Поэтому, надо полагать, CreateObject, для которого привнесения нового CoClass-а с предопределённым CLSID-ом в пространство имён VB не требуется, противопоставляют с подключением TLB, которое требуется для использования квази-оператора New.

P.S. Квазиоператорами я называю New и AddressOf потому, что с точки зрения языка их операнды не являются исчислимыми выражениями, какими, например, будут являться операнды оператора Not или вообще любых других полноценных операторов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: VB и Word (Ошибка 462)

Сообщение Diamock » 15.05.2011 (Вс) 14:11

alibek писал(а):Есть простое правило — убирай за собой, не трогай то, что не твое.
WordApp.Quit зачем там, где он есть?

WordApp.Quit я использовал для закрытия процесса WINWORD.EXE.
Комментируя указанную строку кода, всё работает, но при выходе из программы остаётся висеть процесс WINWORD.EXE, а рядом с созданными *.doc файлами - куча временных файлов.
Каким образом удалить процесс из памяти и временные файлы?
In der Beschrankung zeigt sich erst der Meister
Графоманю...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: VB и Word (Ошибка 462)

Сообщение alibek » 15.05.2011 (Вс) 15:47

Diamock писал(а):WordApp.Quit я использовал для закрытия процесса WINWORD.EXE.

Включай мозги, а не комментируй очевидное.
Если у тебя инстанс ворда создается в конструкторе, то зачем ты его уничтожаешь не в деструкторе?
Lasciate ogni speranza, voi ch'entrate.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: VB и Word (Ошибка 462)

Сообщение Diamock » 15.05.2011 (Вс) 17:08

alibek , большое спасибо! Разобрался! Я изначально писал так:

Код: Выделить всё
Private Sub Class_Terminate()
    '# Уничтожение объекта - Word
    WordApp.Quite False
    Set WordApp = Nothing
End Sub

И не мог понять, где ошибка :shock: . А сейчас разобрался, у меня опечатка WordApp.Quite False. Я написал Quite вместо Quit.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 26

    TopList