Модераторы: mihanik

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать документ Word активным? Средствами VB 
:(
    Опции темы
kminas
Дата 19.12.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Есть программа, которая открывает документ Word для заполнения таблицы в нем. Но, если ранее были открыты другие документы, прога работает с первым из них. Как средствами VB сделать документ Word, открытый прогой активным?
PM MAIL   Вверх
kapbepucm
Дата 19.12.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Код
Const FileName As String = "путь\WordFile.doc"
Dim W As Object
Set W = CreateObject("Word.Application")
W.Visible = True
W.Documents.Open FileName
W.Documents(FileName).Activate



--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
kminas
Дата 19.12.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата(kapbepucm @ 19.12.2007,  12:46)
Код
Const FileName As String = "путь\WordFile.doc"
Dim W As Object
Set W = CreateObject("Word.Application")
W.Visible = True
W.Documents.Open FileName
W.Documents(FileName).Activate

Спасибо за помощь, но есть одно уточняющее обстоятельство: мне заранее не известно имя файла с которым будет работать юзер.
В программе есть 2 открывающие процедуры. 
1 - открывает файл с таблицей и предлагает юзеру сохранить файл под своим именем.
2 - юзер открывает свой же ранее начатый файл.
И как встроит Ваш код сюда, не пойму.
PM MAIL   Вверх
kapbepucm
Дата 20.12.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Цитата(kminas @  19.12.2007,  20:53 Найти цитируемый пост)
мне заранее не известно имя файла
Цитата(kminas @  19.12.2007,  20:53 Найти цитируемый пост)
предлагает юзеру сохранить файл под своим именем
Я думаю, процедура должна "видеть" имя фаила
Цитата(kminas @  19.12.2007,  20:53 Найти цитируемый пост)
юзер открывает свой же ранее начатый файл
Здесь ведь процедура откуда-то знает, что открывать...
Для более осмысленного ответа надо видеть ключевые моменты той самой процедуры...

Добавлено через 1 минуту и 47 секунд
Вообщем метод Activate вам в помощь

Добавлено через 3 минуты и 45 секунд
Но это на первый взгляд. Неисключено, что надо будет идти другим путём...


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
bilya
Дата 20.12.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



kminas,  
 У вас в макросе, скорее всего, есть ссылка на первый документ вроде Documents(1), и поэтому вся работа кода происходит в нем.
Здесь, я думаю, два пути: если ваша программа открывает документ и он остается активным, можно вместо Documents(1) написать ActiveDocument, иначе при открытии загонять имя документа в переменную, типа: Documents("mydocument")
 smile 
PM MAIL   Вверх
kminas
Дата 20.12.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



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

Код

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

PM MAIL   Вверх
bilya
Дата 21.12.2007, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



kminas, 
По первому коду как я понял, что вы используете какой-то шаблон, но не совсем понял, как у вас организована с ним работа  smile (почему кнопка "Сохранить" отрабатывает код открытия документа)
А по второму
Обращайтесь к документу созданного экземпляра приложения:
Код

With oapp.ActiveDocument.Tables
или может быть лучше, конкретизируйте объект
Код

Set wd = oapp.Documents(1)
With wd.Tables

PM MAIL   Вверх
kapbepucm
Дата 21.12.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 3
Всего: 12



Цитата(kminas @  19.12.2007,  11:40 Найти цитируемый пост)
прога работает с первым из них
Какая процедура некорректно работает cmdSave_Click или cmdOpen_Click?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
kminas
Дата 21.12.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



kapbepucm, обе.

bilya, первая процедура открывает файл с таблицей (который должен остаться неизменным). Эту таблицу юзер должен сохранить под своим именем в другой папке и дальше работать с этим файлом, т.е. заполнять таблицу с помощью текста(который заложен в программе) и вводимых переменных;
вторая процедура выводит юзера в папку, где предполагается хранить указанные файлы, он выбирает свой и работает с ним дальше.
PM MAIL   Вверх
bilya
Дата 21.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



kminas, 
Посмотрите это для первого кода (по второму было раньше  smile )
Код
Private Sub cmdSave_Click()
  Dim dlgFolderPicker As FileDialog
  Dim fdf As FileDialogFilter
  Set oapp = CreateObject("Word.Application")
  oapp.Visible = True
  oapp.ChangeFileOpenDirectory "C:\Templates\"
  oapp.Documents.Open FileName:="СпецОВ.doc"
  '''''''''''''''''''''''''''''''''
  Set dlgFolderPicker = oapp.FileDialog(msoFileDialogSaveAs)
  With dlgFolderPicker
    .AllowMultiSelect = False
    .ButtonName = "Сохранить"
    .FilterIndex = 1
    If .Show = -1 Then
        myPuth = .SelectedItems(1)
    Else
        Exit Sub 'здесь можно сделать условие, если не введено новое имя файла
    End If
  End With
  Set dlgFolderPicker = Nothing
  '''''''''''''''''''''''''''
  oapp.ActiveDocument.SaveAs FileName:=myPuth
  oapp.Selection.MoveDown Unit:=wdLine, Count:=3
  Set oapp = Nothing
End Sub



PM MAIL   Вверх
kminas
Дата 22.12.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



bilya, посмотрел. Все тоже. В варианте для первого кода еще приходится переходить в другую папку вручную.  Задавал такой же вопрос на 2-х других формумах.  Ответили по-другому, но все тоже.
А возможен ли другой вариант. ЗАКРЫТЬ! все активные документы, а потом, если захотят пусть откроют снова?
PM MAIL   Вверх
bilya
Дата 22.12.2007, 04:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Так я вам про то и говорю, что не понятно, что вы хотите в этом коде
Конкретно по шагам расскажите, что вам нужно. Я исходил из того (как я понял ваш код), что 
1. 
Цитата(kminas @  21.12.2007,  15:46 Найти цитируемый пост)
 первая процедура открывает файл с таблицей (который должен остаться неизменным)
- по нажатию кнопки "Сохранить" открывается шаблон "СпецОВ.doc"
2. 
Цитата(kminas @  21.12.2007,  15:46 Найти цитируемый пост)
Эту таблицу юзер должен сохранить под своим именем в другой папке
- на его основе создается документ с новым именем и расположением по желанию пользователя
3. 
Цитата(kminas @  21.12.2007,  15:46 Найти цитируемый пост)
и дальше работать с этим файлом
- этот новый документ остается открытым для работы
 smile  
PM MAIL   Вверх
kminas
Дата 22.12.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 240
Регистрация: 26.10.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



bilya, все правильно, только 1 и 2 пункты у меня совмещены, т.е. по нажатию кнопки "Сохранить" открывается шаблон "СпецОВ.doc" на его основе создается документ с новым именем и расположением по желанию пользователя у меня сразу окрвпается друга папка, дабы чего не вышло с базовым файлом. Но это все ерунда. Самое главное, что если пользователь до этого что-то открыл, то и в этом случае код лезет в ранее открытые документы. Я сам, проверяя прогу, забываю закрывать их, потому и задумался. 

PM MAIL   Вверх
bilya
Дата 22.12.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Если у вас будет прописано имя файла, то никуда код не полезет кроме этого файла
Код

  Dim wd As Word.Document
  '''''''''
  Set wd = oapp.Documents(myPuth)
  With wd.Tables(1)
  '''''''''

PM MAIL   Вверх
RussianHero
Дата 15.1.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 14.8.2007
Где: г. Балашиха, МО

Репутация: нет
Всего: нет



kminas, 8) это мне знакомо.. спецификацию значит генерим? 8)
Попробуй вот так,хотя туту уже тебе все что надо подсказали..
Код

    Set myWord = CreateObject("Word.Application")
    myWord.Visible = True
    Set myDoc=myWord.Documents.Add ("С:\Шаблоны\Специфиация.doc", , , True)                         
    myDoc.Activate
.....    

Вопрос, помоему уже решен в квадрате 8)
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0869 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.