Модераторы: 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   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

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

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

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



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


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

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


 




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


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

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