Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Подключить VB к уже запущенной копии Word Добавлено: 24.07.06 14:42  

Автор вопроса:  _ICE_ | ICQ: 354-671-214 
Я объявляю объектную переменную типа Word.Application, и при ее объявлении запускается новый экземпляр Ворда, а существующий продолжает здравствовать. Возможно ли в ВБ подключить программу не к новой копии Ворда, а к той, которая на данный момент уже запущена?

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 24.07.06 17:33
В смысле запущена или просто существует?

Ответить

Номер ответа: 2
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #2 Добавлено: 24.07.06 17:40
Смысл вот в чем: я отлаживаю надстройку для ворда, которая работает с документами. Запускаю прогу 1-й раз. Запускается ворд, открывается документ и т.д. Завершаю свою программу, не выходя из ворда. Запускаю программу на повторное выполнение и запускается новая копия ворда, а мне было бы интересно продолжить работу в старой копии, т.е. уже существующей. При чем не обязательно эта копия изначально создана моей программой.

Ответить

Номер ответа: 3
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #3 Добавлено: 24.07.06 17:42
Под копией я понимаю экземпляр Ворда, т.е. процесс, а не документ если ты об этом подумал.

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 24.07.06 18:53
Тогда тебе не надо открывать заново ворд.
Дело в том, что если ворд открылся при запуске этой програмки, затем ты ее выключил, снова включил и хочещь работать с тем же документом(который был открыт с первого запуска этой програмки и ты его не закрыл), то делать ничего не надо - ты уже работаешь с ним...

Если у тебя ворд открывается в Form_load, то сделай так, чтобы он у тебя открывался лучше при нажатии какой-либо кнопки, ну или другого события. Так, чтобы ты вручную мог ее включить.

Если же ты хочешь, чтобы запуск ворда всё же остался в Form_Load(Ну задумано у тебя так, ни шаг влево, ни шаг вправо), то задай условие

Private Sub Form_Load()
If <ворд не работает> then
<Включаем ворд>
End If
End Sub

Ответить

Номер ответа: 5
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #5 Добавлено: 25.07.06 10:00
Саша, ну ты со мной уже вообще как с маленьким :) Дело в том, что я и не запускаю ворд, я объявляю объектную переменную типа Private W as New Word.Application. По-другому оно у меня не срабатывает. Так вот при этом и запускается Ворд. Если я не объявлю переменную, то не смогу работать с вордом, на что я буду ссылаться? Вот в этом собстенно и суть вопроса. Как объявить такую переменную и не запустить нового экземпляра ворд?

Ответить

Номер ответа: 6
Автор ответа:
 BeTe



Вопросов: 6
Ответов: 30
 Профиль | | #6 Добавлено: 25.07.06 11:12

Я с Excel'ум поступал так:

Public objExcel As Object


и потом в Form_Load

    On Error GoTo lCrObj
    ' Попробуем влезть в уже запусченый Эксель
    Set objExcel = GetObject(, "Excel.Application";)
    ' Если ошибок нету то пропустим кусок кода
    GoTo lSkip
lCrObj:
    ' Создадим Эксель если такового не было в памяти
    Set objExcel = CreateObject("Excel.Application";)
lSkip:
    ' Тут пиши что хочешь
    With objExcel
    '...
    End With



Сделай тоже самое тока вместо Excel.Application напиши Word.Application ну или как то так... по синтаксису влом проверять.

Ответить

Номер ответа: 7
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #7 Добавлено: 25.07.06 11:14
Человеческое тебе спасибо, BeTe! В десяточку!

Ответить

Номер ответа: 8
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #8 Добавлено: 25.07.06 11:20
Только мой тебе совет насчет GoTo: избавляйся от них к чертям собачьим. Запутано все до невозможности. Ошибки я отлавливаю таким образом:
On Error Resume Next
Err=0
.....команда, которая может вызвать ошибку.....
If Err>0 Then
    .....обработка ошибки.....
End If
Просто и понятно, без всяких скачков, имеем линейный код. В Си такие вещи называются исключениями.

Ответить

Номер ответа: 9
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #9
Добавлено: 25.07.06 11:22
Я делал так: при нажатии книпки1:

Private Sub Command1_Click()
    Dim W As Object
    Dim D As Object
    Set W = CreateObject("Word.Application";)
    Set D = W.Documents.Open("C:\Documents and Settings\Александр\Мои документы\Когда.doc";)
    W.Visible = True
End Sub

Потом закрываю проиложение, а ворд остается работать. Далее запускаю его заново, нажимаю кнопку2, смотри:

Private Sub Command2_Click()
    Selection.TypeText Text:="455555"
End Sub

И он спокойно пишет это в открытом вордовском документе без повторного открытия или объявления переменной.
P. S. Если у тебя что-то вроде этого:

Private Sub Command3_Click()
    Dim W As New Word.Application
    W.Visible = True
    W.Documents.Add
End Sub

То не отчаивайся, всё работает <h>точно также</h>,попробуй и не надо ни на что ссылаться. В чём проблема?

Ответить

Номер ответа: 10
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #10 Добавлено: 25.07.06 11:29
И тебе Alexandr спасибо. Знаешь как бывает, раз нашел путь, и работаешь по нему дальше. Так и мне влом было че-то там выискивать в этих объектных переменных, раз и через New все работает. Теперь буду так.

Ответить

Номер ответа: 11
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #11 Добавлено: 25.07.06 11:36
Вот только уже выяснил чем мой способ был лучше: когда объявлять Ворд Явно (W as New Word.Application), то VB знает какого типа эта переменная и дает доступ ко всем свойствам, методам и функциям Ворда, а вашим способом необходимо все ручками прописывать. Поэтому если не стоит задача влазить в существующее приложение советую работать через New

Ответить

Номер ответа: 12
Автор ответа:
 BeTe



Вопросов: 6
Ответов: 30
 Профиль | | #12 Добавлено: 25.07.06 11:56
To Alexey:
Можно и без GoTo, путей на самом деле куча. Просто чтобы было понятней я сделал так. Писал то прямо в проводнике.
А обычно тоже использую конструкцию resume next
На счет использования New не согласен... Посмотреть свойства можно и в object browser. но зато так программа не зависит от внешних всяких ссылок. А если использовать New то придется подключать Word в reference а это даст ошибку при загрузке программы (и закончится ее выполнение) если офис не или ворд не установлен, тогда как в том варианте что написал я у тебя просто сработает обработчик ошибки.

Ответить

Номер ответа: 13
Автор ответа:
 _ICE_



ICQ: 354-671-214 

Вопросов: 18
Ответов: 103
 Профиль | | #13 Добавлено: 25.07.06 11:59
Ах вот еще в чем фишка... Что ни день, то новости. Спасибо, насчет референса я не знал (в смысле что он теперь не нужен), меня самого задолбало их подключать.

Ответить

Номер ответа: 14
Автор ответа:
 BeTe



Вопросов: 6
Ответов: 30
 Профиль | | #14 Добавлено: 25.07.06 12:01
Усегда пожалуста :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам