Как средствами VB, сделать документ Word активным?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Как средствами VB, сделать документ Word активным?

Сообщение kminas » 19.12.2007 (Ср) 11:54

Есть программа, которая открывает документ Word для заполнения таблицы в нем. Но, если ранее были открыты другие документы, прога работает с первым из них. Как средствами VB сделать документ Word, открытый прогой активным?
Константин

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 19.12.2007 (Ср) 12:18

Для этого нужно сначала узнать, каким образом прога цепляется к первому документу.
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 19.12.2007 (Ср) 22:11

Antonariy писал(а):Для этого нужно сначала узнать, каким образом прога цепляется к первому документу.

Пока не получилось узнать
Константин

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 19.12.2007 (Ср) 22:52

Ну а каким образом открывает? Может таки код в студию?
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 20.12.2007 (Чт) 19:22

Это код создания файла

Код: Выделить всё
Private Sub cmdSave_Click()

Set oapp = CreateObject("Word.Application")
oapp.Visible = True
oapp.ChangeFileOpenDirectory "C:\Мои документы\Спецификации\Templates\"
oapp.Documents.Open FileName:="СпецОВ.doc"
oapp.ActiveDocument.SaveAs FileName:="\Мои документы\Спецификации\Задай ИМЯ файла", FileFormat:=wdFormatDocument, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False
oapp.Selection.MoveDown Unit:=wdLine, Count:=3
oapp.Dialogs(wdDialogFileSaveAs).Show

End Sub


А это код открытия уже существующего файла

Код: Выделить всё
Private Sub cmdOpen_Click()
Set oapp = CreateObject("Word.Application")
oapp.Visible = True
oapp.ChangeFileOpenDirectory "c:\Мои документы\Спецификации\"
oapp.Dialogs(wdDialogFileOpen).Show
With ActiveDocument.Tables
     If .Count > 0 Then
        With .Item(.Count)
             .Cell(.Rows.Count, 1).Select
        End With
     End If
End With
End Sub
Константин

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 20.12.2007 (Чт) 19:35

Хуже не придумаешь.
Код: Выделить всё
oapp.ChangeFileOpenDirectory "c:\Мои документы\Спецификации\"
oapp.Dialogs(wdDialogFileOpen).Show
With ActiveDocument.Tables
Замени это своим диалогом выбора файла и этим:
Код: Выделить всё
Set doc=oapp.Documents.Open(strFile)
With doc.Tables
...
Это гарантия того, что ты будешь работать именно с тем файлом, который открыл, а не первым попавшимся активным. И соответственно
Код: Выделить всё
oapp.Documents.Open FileName:="СпецОВ.doc"
oapp.ActiveDocument.SaveAs
на
Set doc=oapp.Documents.Open("СпецОВ.doc" )
doc.SaveAs
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 20.12.2007 (Чт) 20:11

Я не понял твои предложения к первому коду или ко второму?
Константин

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 21.12.2007 (Пт) 9:56

Первый ко второму, второй к первому.
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 22.12.2007 (Сб) 16:56

Antonariy Все то же, что и в других случаях.
А строку
Код: Выделить всё
Set doc=oapp.Documents.Open(strFile)
не воспринимает, пишет: ошибка комманды
Константин

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 22.12.2007 (Сб) 20:35

Ну так в strFile у тебя есть путь к файлу?
Salus populi suprema lex

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 22.12.2007 (Сб) 22:41

Ничего не выходит. Буду искать вариант закрытия всех открытых документов. Или проще. Скажу, чтоб не открывали файлы.
Константин

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 23.12.2007 (Вс) 0:53

Ничего не выходит. Буду искать вариант закрытия всех открытых документов. Или проще. Скажу, чтоб не открывали файлы.

:D вот это молодец, Константин, чисто девелоперский подход

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.12.2007 (Вс) 9:23

kminas
Лучше скажи начальству, чтобы тебя сняли с программерской должности и сделали простым манагером. Программисты должны уметь пользоваться мозгом, без этого никогда ничего само по себе получаться не будет.
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 23.12.2007 (Вс) 11:23

Antonariy
А кто тогда пудет проги писать?
Я и не на программерской должности - это одна из 4-5 работ, которыми я занимаюсь. Начал заниматься 2 года назад, но с почти годовым перерывом, т.к. не было легальной проги, а другие запретили.
Программеров всех разогнали, а ко мне обратились за помощью именно по той причине, что я думаю. Когда какие-нибудь проги не идут, а штатные сотрудники не могут разобраться - зовут меня.
К примеру попросили меня выяснить, почему сайта не могут найти в поисковиках. В итоге после полугодового копания без единой книги я продвинул сайт по 18 основным запросам на 1 место в Яндексе и увеличил кол-во страниц в 2,5 раза. В итоге число заказов резко пошло вверх и т.д.
Просто думать можно по разному.
Качество "думания" сильно зависит от базы в голове.
Константин

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 23.12.2007 (Вс) 17:23

В данном конкретном случае база вообще не важна, достаточно элементарной логики. Если что-то не открывается, нужно в первую очередь проверить, что откываем? Есть ли оно вообще на диске?
Set doc=oapp.Documents.Open("c:\file.doc")

Какая для этого нужна база?
Лучший способ понять что-то самому — объяснить это другому.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 24.12.2007 (Пн) 20:28

Спасибо попробую помыслить логически, но уже на праздниках ибо мне предстоит несколько бессонных ночей. Взял работу по основной специальности. Спасибо
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 29.03.2008 (Сб) 23:03

Здравствуйте! Прога практически готова. Но данной проблемы почти не касался. Недавно опять вернулся. Читал книжки, смотрел советы, думал и вот что вышло.

Код: Выделить всё
Public oapp As Object

Dim dlg As Object

Set oapp = CreateObject("Word.Application")
oapp.Visible = True
Set dlg = Dialogs(wdDialogFileOpen)
oapp.ChangeFileOpenDirectory "C:\Путь\..."
   
    If dlg.Show = -1 Then
         Documents.Open FileName:=dlg.Name
         Documents(dlg.Name).Activate
    End If

Мозгами понимаю, что одна из строк лишняя, но несколько вариантов перепробовал и ничего...
Да главное. Открытый мной документ активируется!!! Но, если ранее был уже открыт документ, появляется еще одна копия Word, но без документа.
Где прокол?
И, почему при открытии первого документа такого не происходит?
Константин

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

Сообщение alibek » 31.03.2008 (Пн) 7:40

Для начала, диалог Word тебе вообще не нужен.
Лучше используй Set oapp = GetObject("c:\doc1.doc","word.application"), тогда у тебя будет выбран документ doc1.doc, если он уже открыт, либо загружен, если еще не открыт.
Lasciate ogni speranza, voi ch'entrate.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 06.04.2008 (Вс) 9:36

Спасибо, учту. Такого варианта еще не было.
Константин

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 06.04.2008 (Вс) 15:44

Нет, не вышло. Выдает
Error 432 Не найдено имя файла или класса при программирования объектов.

Да мне уже на другом форуме подсказали. Пока вроде идет нормально

Код: Выделить всё
    On Error Resume Next
    Set oapp = GetObject(, "Word.Application")
    If Err.Number <> 0 Then
        Err.Clear
        On Error GoTo 0
        Set oapp = CreateObject("Word.Application")
    End If
    oapp.Visible = True
    Set dlg = oapp.Dialogs(80) 'wdDialogFileOpen
    If dlg.Show = -1 Then
        oapp.Documents.Open Filename:=dlg.Name
    End If

Добавил только путь.
Константин


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

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

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

    TopList