VB + Word.Application. Как это сделать ПРАВИЛЬНО?

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

VB + Word.Application. Как это сделать ПРАВИЛЬНО?

Сообщение Ping » 22.06.2004 (Вт) 10:48

Добрый день, Вам. Есть у меня на первый взгляд самая стандартная задача "VB&WORD":
--------------------------------------------------
Для начала опишу что требуется:
-программа на VB (exe)
-в окне объект WB As WebBrowser
-подключена библиотека Microsoft Word 8.0 Object Library
-созданы объекты: WAPP As Word.Application и WDOC As Word.Document
необходимо сделать чтото вроде проводника (дерево слева) по структуре с параллельным отображением документа (справа). Документы это индексированный список файлов *.doc
--------------------------------------------------
(*) Теперь то что делаю я (раньше делал, теперь понимаю что нужно по другому):

WB.Navigate("filename.doc")
Set WDOC = WB.Document
// и далее через методы и свойства класса WDOC управляю
// отображением документа в WB.
--------------------------------------------------

Чисто интуитивно я понимаю что надо делать так:

Set WAPP = CreateObject("Word.Application")
Set WDOC = WAPP.Documents.Open("Filename.doc")
// а потом КАК-ТО передать объект WDOC в WB.Document (чтобы
// WebBrowser отобразил этот WDOC) - но пока не знаю как.
// видимо есть и другой сценарий: сначала выполнить WB.Navigate
// ("filename.doc") , а потом его (WB.Document) передать в WDOC.
--------------------------------------------------

По тому варианту которым я пользовался (*): вобщем все проходит. через WDOC я могу и на печать отправить, и поиск в тексте сделать, и зуум и вобщем все. Но если в моменты, когда доковский файл открыт в моей программе запустить ворд то глючит:
- в запущенном ворде пропадают все панели инструментов
- после возвращения в мою программу при кликанье на открытый документ не происходит фокусировки и потом вообще вываливается.

--------------------------------------------------

Спасибо за Ваши советы.
p.s. Этот же вопрос весит на другом форуме "программистов" - те молчат. Может хоть сдесь просветят.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2004 (Вт) 11:09

Ну я бы сделал так.

Код: Выделить всё
Private Sub Command1_Click()
  OLE1.CreateLink "c:\Проверка связи.doc"
  MsgBox OLE1.object.fullname
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ping
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.06.2004 (Вт) 10:41

Сообщение Ping » 22.06.2004 (Вт) 11:23

спасибо.
так я не пробовал. документ действительно открылся.
по дблклику - вызывает приложение-сервер (ворд).

а не подскажешь как теперь мне в OLE1 управлять этим документом.
например скролы туда вставить. реагировать на нажатую гипперссылку.
управлять зумом. осуществлять поиск в тексте.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2004 (Вт) 11:29

ole1.object - это Word.Document. Со всеми своими методами.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ping
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.06.2004 (Вт) 10:41

Сообщение Ping » 22.06.2004 (Вт) 11:37

да. уже нашел такой. выполнил:

set WDOC = OLE1.Object

но , например,

(*) WDOC.ActiveWindow.View.Zoom.Percentage = WDOC.ActiveWindow.View.Zoom.Percentage + 10
' приближение по 10%

ни к чему не приводит в окне OLE1.
но если вызвать из OLE1 сам Word (дабл клик)
выполнение (*) приводит к изменениям
в окне Worda. Как обойти? Так вроде
на правильном пути. Попробую посмотреть свойства OLE1.
Может там флаг есть какойто...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2004 (Вт) 11:38

Там определённо есть refresh...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ping
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.06.2004 (Вт) 10:41

Сообщение Ping » 22.06.2004 (Вт) 11:46

неа. не реагирует.
дело в том, что когда я пишу

WDOC.ActiveWindow.View.Zoom.Percentage = ...

я уже заведомо обращаюсь не к [Form1.Ole1], а
к [ActiveWindow], который есть Word. и ззум крутиться
в Worde (это видно если ворд вызвать). Надо либо не через ActiveWindow,
либо в OLE1 - флажок какойто крутнуть, чтобы
считалось что ActiveWindow - это он (OLE). Попробую сейчас поискать чтонибудь...


спасибо, конечно, за помощь.

Ping
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 22.06.2004 (Вт) 10:41

Сообщение Ping » 22.06.2004 (Вт) 12:11

ничего не нахожу.
чтобы я ни делал все изменения отражаются только в вызванном окне Worda.
может есть какието мысли?


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

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

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

    TopList