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

Поиск:

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


Бывалый
*


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

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



RussianHero, 
Я, к сожалению не понял, где квадрат 8) и вообще ничего у меня не получилось.
Может есть кто-нибудь поумнее меня на каком-нибудь форуме, 
bilya,  kapbepucm или еще кто-нибудь, ну не получется у меня.
Вот полный код одной процедуры получившийся после осмысления нескольких советов. Поправьте, пожалуйста.

Код

Public oapp As Object
Option Explicit
_______________________________________________________
Private Sub cmdSave_Click()
  Dim dlgFolderPicker As FileDialog
  Dim fdf As FileDialogFilter
  Dim myPuth
  Set oapp = CreateObject("Word.Application")
  oapp.Visible = True
  oapp.ChangeFileOpenDirectory "C:\Templates\"
  oapp.Documents.Open FileName:="СпецОВ.doc"
  oapp.ChangeFileOpenDirectory "C:\Мои документы\Спецификации\"

  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


Beep
frmOpen.Hide
frmShtamp.Hide
With frmObor
.Show
.optShtamp.Visible = True
.optShtamp.Value = False
.SSTab1.Visible = True
.txtPos.Visible = True
.txtQuant.Visible = True
.Label4.Visible = True
.Label5.Visible = True
End With

End Sub

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


Шустрый
*


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

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



Как я понял, ошибка здесь (для этого случая) - вы создаете НОВЫЙ ОБЪЕКТ ПРИЛОЖЕНИЯ WORD (не объект документа) и пытаетесь одновременно сделать видимыми как этот объект приложения, так и форму, относящуюся к другой аппликации, для того, чтобы с этой формы что-то делать с созданным документом - правильно?
Поэтому документ нужно открывать в том же приложении, где находится форма, его открывающая
В общем, смотрите пример.
И еще. То, что у вас после "With frmObor" - т.е. относится к другой форме - пишите в UserForm_Initialize той формы (кроме .Show, есс-но  smile )

Пишем в модуле:
Код
Public wdoc As Word.Document

Пишем в первой форме:
Код
Private Sub CommandButton1_Click()
  Dim dlgFolderPicker As FileDialog
  Dim fdf As FileDialogFilter
  Dim myPuth As String
  Documents.Add "C:\СпецОВ.doc"
  Set wdoc = GetObject(ActiveDocument.FullName)
  Set dlgFolderPicker = Application.FileDialog(msoFileDialogSaveAs)
  With dlgFolderPicker
    .AllowMultiSelect = False
    .ButtonName = "Сохранить"
    .InitialFileName = "d:\"
    .FilterIndex = 1
    If .Show = -1 Then
      myPuth = .SelectedItems(1)
    Else
      Exit Sub
    End If
  End With
  Set dlgFolderPicker = Nothing
  wdoc.SaveAs FileName:=myPuth
  Selection.MoveDown Unit:=wdLine, Count:=3
  UserForm1.Hide
  UserForm2.Show
  Set wdoc = Nothing
End Sub

И для примера во второй форме:
Код

Private Sub CommandButton1_Click()
  wdoc.Tables(1).Rows(1).Select
  UserForm2.Hide
End Sub


Это сообщение отредактировал(а) bilya - 19.1.2008, 08:01
PM MAIL   Вверх
RussianHero
Дата 18.1.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Че-то я уже вообще ниче не понимаю 8)))
Вроде бы у него ниче не закрываеться... насколько я понял, что ему надо: Открыть ворд, взять загрузить туда документ(шаблон), потом он с ним че-то должен сделать..., потом, после того, какпрошла процедура обработки/генерации ит.п. он просто хочет его сохранить в другой попке... вот и все. Автор, это вам надо?
PM MAIL WWW ICQ   Вверх
bilya
Дата 18.1.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



RussianHero, смотрите вопрос темы.
Как я понял - требуется: открыть шаблон - на его основе сделать документ - сохранить документ (без закрытия) - работать в дальнейшем с документом с формы (но не с той, которая его открыла)
Так?
 smile 
PM MAIL   Вверх
kminas
Дата 18.1.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bilya @ 18.1.2008,  09:19)
RussianHero, смотрите вопрос темы.
Как я понял - требуется: открыть шаблон - на его основе сделать документ - сохранить документ (без закрытия) - работать в дальнейшем с документом с формы (но не с той, которая его открыла)
Так?
 smile

Да, bilya прав.
Открывается документ Word с таблицей, SaveAs (т.к. эта таблица используется в виде шаблона),  форма, открывающая его закрывается и открывается форма с контролами и базами для заполнения таблицы.
Спасибо, bilya, я еще плохо владею процессами загузки (выгрузки), инициализации форм, придется сильно поработать мозгами и руками.
 
PM MAIL   Вверх
bilya
Дата 19.1.2008, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кстати, а для чего вообще вы делаете контрол.Visible = True? Они у вас до этого скрыты, что ли?
PM MAIL   Вверх
kminas
Дата 19.1.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bilya @ 19.1.2008,  06:17)
Кстати, а для чего вообще вы делаете контрол.Visible = True? Они у вас до этого скрыты, что ли?

Проверил, действительно они могут быть открыты, а некоторые и открыты, а это имеет значение?
Кстати, Ваш пример пока не пошел. Прога ругается на 
Код
 Documents.Add 
 
Попробовал поменять местами со следующей строчкой  
Код

Set wdoc = GetObject(ActiveDocument.FullName)
 стала ругаться на нее


Это сообщение отредактировал(а) kminas - 19.1.2008, 14:54
PM MAIL   Вверх
bilya
Дата 19.1.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Если вы специально не устанавливаете предварительно .Visible = False у контролов, то это делать бессмысленно
2. ВАШ путь прописываете правильно? 
Код

  Documents.Add "C:\Templates\СпецОВ.doc" ' так у вас как-будто 


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


Бывалый
*


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

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



Цитата(bilya @ 19.1.2008,  16:20)
1. Если вы специально не устанавливаете предварительно .Visible = False у контролов, то это делать бессмысленно
2. ВАШ путь прописываете правильно? 
Код

  Documents.Add "C:\Templates\СпецОВ.doc" ' так у вас как-будто 

1. Я не про бессмысленно, это пояснять не надо, почему плохо из другой формы включать? Я понял, что эти контролы можно не прятать - они относятся ко всем исполняемым процедурам.
2. Немного не такой, но путь указываю правильно. Тут другое дело. Прога пишет ошибку 429. ActiveX component can't create object и указывает на  
Код

Documents.Add 


Это сообщение отредактировал(а) kminas - 19.1.2008, 17:20
PM MAIL   Вверх
bilya
Дата 19.1.2008, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Да можно и с другой. Только в такой последовательности он у вас не работает. Попробуйте прогнать код по-шагово.  smile 
2. Ни каких, случаем, объявлений не делали интересных? Посмотрите - так получится?
Код

  Documents.Open "C:\myfile.doc"


Это сообщение отредактировал(а) bilya - 19.1.2008, 18:01
PM MAIL   Вверх
kminas
Дата 19.1.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



1. Пошагово не один десяток раз прогонял, все открывается, но это на форме, а меня это не волнует, волнует открытие документа, кроме того я уже их всех отключил.

2. Вот весь мой код до упомянутой строки

Код

Public wdoc As Word.Document
Public n As Integer
Option Explicit


Код

Private Sub cmdSave_Click()

  Dim dlgFolderPicker As FileDialog
  Dim fdf As FileDialogFilter
  Dim myPuth As String
  
  Documents.Open "C:\myfile.doc"

Выдает тот же run-time error "429"

Это сообщение отредактировал(а) kminas - 19.1.2008, 19:19
PM MAIL   Вверх
bilya
Дата 20.1.2008, 05:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. Дело в том, что у вас сначала вторая форма открывается (с параметрами контролов, установленных по умолчанию) и только после закрытия этой формы начинает отрабатывать код, находящийся ниже .Show  smile 
2. Попробуйте так:
Код

Application.Documents.Add "C:\....."

Если не пойдет и есть возможность - скиньте ваш файл сюда
PM MAIL   Вверх
kminas
Дата 21.1.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bilya @ 20.1.2008,  05:13)

2. Попробуйте так:
Код

Application.Documents.Add "C:\....."

Если не пойдет и есть возможность - скиньте ваш файл сюда

Спасибо, вроде заработало, только выдает ошибку 0. Буду искать. Кроме того пришлось немного пересроить код я добавил 
Код

ChangeFileOpenDirectory "C:\...\"
Теперь о случае, когда надо открывать свой файл.
Сделал как написано в книге  (это первая строчка)
Код

Set dlgFolderPicker = Application.FileDialog(msoFileDialogOpen)

Выдает ошибку 429
ActiveX component can't create object or return reference to this object 
Невозможно создание объекта или возвращение ссылки на этот объект компонентом ActiveX 

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


Бывалый
*


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

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



Ну, вроде работает нормально, разве что все равно код лезет в файл открытый первым. Ну да ладно, научусь и позже подправлю, а пока поработают с одним файлом. Проблема в другом. Программа выдает ошибку 4160, когда в имени файла пробел. Проверял и "-" и "." все жрет, а с пробелом не хочет открывать. Вот код:
Код

Private Sub cmdOpen_Click()

Set oapp = CreateObject("Word.Application")
oapp.Visible = True
oapp.ChangeFileOpenDirectory "C:\Чертежи\Спецификации\"

Set dlg = oapp.Dialogs(80)
If dlg.Show = -1 Then
        Documents.Open FileName:=dlg.Name
        iFileName = dlg.Name
        Documents(iFileName).Activate
        
Set oapp = CreateObject("Word.Application")
oapp.Visible = True
oapp.ChangeFileOpenDirectory "C:\Чертежи\Спецификации\"

Set dlg = oapp.Dialogs(80)
If dlg.Show = -1 Then
        Documents.Open FileName:=dlg.Name
        iFileName = dlg.Name
        Documents(iFileName).Activate
    Else
        'если нажали Отмена
        Set dlg = Nothing
        Set oapp = Nothing
        End
    End If


frmShtamp.Hide
frmObor.Hide
frmWelcome.Show


Exit Sub

End Sub


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


Бывалый
*


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

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



Снова вернулся к описанной проблеме. Уже кое-что получилось. Например этот код работает. И, если я открываю второй и далее документы Word, то активным становится открытый мной.
 
Код

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, но без документа. 
А при открытии первого документа такого не происходит?

И еще. Почему-то при откртии файла в имени которого есть пробел, программа выдает ошибку 4160 и пишет: "неправильное имя файла"
Это происходит при активации файла (последняя строка)

Это сообщение отредактировал(а) kminas - 29.3.2008, 23:46
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

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

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

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



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


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

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


 




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


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

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