Vba из Vb

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Vba из Vb

Сообщение K Victor A » 17.05.2009 (Вс) 15:28

Подскажите! у меня такая проблема: создаю вордовский документ из VB6 заполняю его, все в порядке, сохраняю, закрываю, не закрывая свое приложение опять создаю документ пишет ошибку: 462 the remote server machine does not exist or unavailable. выключаю свое приложение, запускаю все работает. Подскажите в чем проблема может что нибудь нужно обнулять?! переменные word document и word application обнуляю!?!?!

DeMONiZ
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 03.01.2009 (Сб) 18:32

Re: Vba из Vb

Сообщение DeMONiZ » 17.05.2009 (Вс) 17:25

Возможно это тебе поможет:
http://forum.vingrad.ru/forum/topic-205736.html

K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Re: Vba из Vb

Сообщение K Victor A » 18.05.2009 (Пн) 6:52

Код: Выделить всё
Call ShellExecute(Me.hwnd, "open", "Акт.rtf", "", (App.Path & "\Формуляр\"), 3)

    ActiveDocument.SaveAs FileName:="Акт.doc", FileFormat _
        :=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False

‘ сохраняет в мои документы

(процедуры заполнения документа)

ActiveDocument.Close
Word.Application.Quit



Не закрывая своего приложения опять вызываю процедуру! Пишет ту же ошибку!, после перезагрузки своего приложения опять работает один раз. Ошибку выдает на сохранении:
ActiveDocument = <the remote ser dos not exist ...> - вобщем сама ошибка 462ая
Не обращайте внимания на ShellExecute – это просто уже перебор различных вариантов, если использую:
Код: Выделить всё
Set WordApp = New Word.Application
Set WordDoc = WordApp.Documents.Open("C:\1\Акт.doc") ' Word.Application ->WordApp
WordApp.Visible = True


ChangeFileOpenDirectory _
        App.Path & "\Акты\"
    ActiveDocument.SaveAs FileName:="1.doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False


WordDoc.Close
WordApp.Quit

Set WordApp = Nothing
Set WordDoc = Nothing




Все тоже самое Подскажите как исправить!?!?!?

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Vba из Vb

Сообщение Vi » 18.05.2009 (Пн) 12:10

У тебя проблемы с обращением к объекту Global Ворда или его глобальным функциям, например, при ActiveDocument.SaveAs происходит обращение к объекту Global и его функции ActiveDocument, т.е. Global.ActiveDocument.SaveAs. Поэтому обращайся к функциям ТОЛЬКО через созданные или полученные объекты. Вот это вот "Word.Application ->WordApp" в примере и есть замена обращения глобального объекта на свой, созданный.

Объяснение.
Некоторые объекты описаны в TLB с атрибутом appobject:
The [appobject] attribute also indicates that the functions and properties of the coclass are globally available in the current type library.

При обращении к методам этого объекта он создается автоматически (по крайней мере в VB) и его удаление лежит на приложении. Однако в этом случае Ворд при выходе в конце работы с ним РЕАЛЬНО не выходит, а прячется, потому что есть неявный объект с глобальными функциями, который создал для пользователя VB. И, что самое паскудное, работу с этим объектом блокирует из-за своего внутренней вредности, поскольку объект Application уже был завершен. Освободить объект, который создал VB, нет возможности (для этого нужно выгрузить TLB приложения Ворд). И ситуация становится патовой.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Re: Vba из Vb

Сообщение K Victor A » 18.05.2009 (Пн) 18:42

то есть ничего нельзя сделать?! я обхожу так: из приложения я создаю несколько word документов, после создания каждого сохраняю и складываю в определенную папку (закрываю) затем пишу
Код: Выделить всё
WordApp.visible = false
проблемы начинаются после того как вручную открываю word и закрываю. в памяти уже нет word application и начинается все та же ошибка. может как нить по другом это все сделать?!

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

Re: Vba из Vb

Сообщение alibek » 19.05.2009 (Вт) 0:06

Посты Vi — это (обычно) кладезь мудрости.
Поэтому перечитывай его сообщение, пока на тебя не снизойдет просветление.
Тогда, может быть, ты заметишь фразу
Поэтому обращайся к функциям ТОЛЬКО через созданные или полученные объекты. Вот это вот "Word.Application ->WordApp" в примере и есть замена обращения глобального объекта на свой, созданный.
Lasciate ogni speranza, voi ch'entrate.

K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Re: Vba из Vb

Сообщение K Victor A » 19.05.2009 (Вт) 4:58

Так, ну это я понял! (что нужно использовать переменные) Пример описывал с переменными и без! Все равно выводит Вот код:
Код: Выделить всё
Dim WordApp As New Word.Application
Dim WordDoc As Word.Document
On Error GoTo Oshibka

With WordApp
        .WindowState = Word.WdWindowState.wdWindowStateNormal
        .Documents.Open App.Path & "\Формуляр\Акт.rtf"
         Set WordDoc = WordApp.ActiveDocument
        .Visible = True
End With
   
    ChangeFileOpenDirectory _
        App.Path & "\Акты\"
    WordDoc.SaveAs FileName:="Акт №" & Left(Text100.Text, 8) & Mid(Text100.Text, 10, 6) & right(Text100.Text, 5) & ".rtf", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False

With WordDoc.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait


.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
    End With

With WordApp.Selection
    .ParagraphFormat.Alignment = wdAlignParagraphLeft
    .Font.Bold = True
    .Font.Size = 12
    .TypeText Text:="Приложение 1"

.Font.Underline = wdUnderlineSingle
     .TypeText Text:="" & Trim(Adodc2.Recordset.Fields(5))
     
     
     
     End If
           
    End With

    WordDoc.Save
WordDoc.Close
WordApp.Quit

Set WordDoc = Nothing
Set WordApp = Nothing

MsgBox "Файл экспортирован в папку Акты", vbInformation, "Информация"

Это весь код который я использую! Без внутренностей.

В чем тогда моя ошибка?
Выводит туже ошибку когда создаю второй документ. На строке:
Код: Выделить всё
ChangeFileOpenDirectory

Помогите разобраться четыре дня топчусь на одном месте :(

K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Re: Vba из Vb

Сообщение K Victor A » 19.05.2009 (Вт) 5:10

Вот так еще делал! Все не то... :(
Код: Выделить всё
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
On Error GoTo Oshibka

Set WordApp = New Word.Application
Set WordDoc = WordApp.Documents.Open(App.Path & "\Формуляр\Акт.rtf")

WordApp.Visible = True

    ChangeFileOpenDirectory _
        App.Path & "\Акты\"
    WordDoc.SaveAs FileName:="Акт №" & Left(Text100.Text, 8) & Mid(Text100.Text, 10, 6) & right(Text100.Text, 5) & ".rtf", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Vba из Vb

Сообщение Vi » 19.05.2009 (Вт) 8:11

Все вызовы должны быть через объект WordApp, потому что он обладает всеми теми функциями, которые являются глобальными.
Т.е.
Код: Выделить всё
WordApp.ChangeFileOpenDirectory App.Path & "\Акты\"
тоже.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

K Victor A
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 13.05.2009 (Ср) 4:56

Re: Vba из Vb

Сообщение K Victor A » 20.05.2009 (Ср) 4:15

Всем огромное спасибо! наконец то заработало! :D всем счастья!!!


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 63

    TopList  
cron