Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Visual Basic: Открыть Word документ, и сделать изменения

Автор: xntx
Дата сообщения: 03.10.2004 12:31
Вот незадача... Нужно на VB открыть вордовский документ, повставлять слова всякие (в определенные места) а потом его сохранить с определенным именем.
Я на ВБ почти ноль, может кто ткнем носом на ключевые слова, куда смотреть... кажись это через COM делается, так?
Автор: Troitsky
Дата сообщения: 04.10.2004 20:21
По-моему уже нет человека, который бы этот совет не слышал:
Меню Сервис/Макрос/Начать запись
Производишь действия, которые надо, останавливаешь запись, смотришь в редакторе, что получилось, анализируешь код, правишь, минимизируешь... и имеешь то, что надо.
Автор: xntx
Дата сообщения: 04.10.2004 21:24
Troitsky
я ворд открываю только чтоб шпаргалки написать, про макросы мне не слова
спасибо, пойду посмотрю.

Добавлено
а как сделать чтоб в ворде появился мой Form по вызову? не лазить же каждый раз в ВБ и не нажимать play.

Добавлено
а может все-таки както можно из наружной программы открыть документ?
Автор: Troitsky
Дата сообщения: 05.10.2004 19:52
Что-то типа этого:


Код: Dim objWord As Object

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open ("document.doc")
'Вставляешь всякие слова (в определенные места)
objWord.ActiveDocument.SaveAs ("new_document.doc")
objWord.ActiveDocument.Close
objWord.Quit

Set objWord = Nothing
Автор: xntx
Дата сообщения: 05.10.2004 21:41
Troitsky

Цитата:
'Вставляешь всякие слова (в определенные места)

хех, по логике мыслей, там должно быть такое:

Код: objWord.Selection.Find.ClearFormatting
objWord.Selection.Find.Replacement.ClearFormatting
With objWord.Selection.Find
.Text = "ABC"
.Replacement.Text = box_estacion_base.Text
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
objWord.Selection.Find.Execute Replace:=wdReplaceAll
Автор: Troitsky
Дата сообщения: 05.10.2004 22:44
А ты поставь ссылочку на Microsoft Word 10.0(или другой) Object Library в меню Project/References Я думаю, тогда все заработает.
Автор: Troitsky
Дата сообщения: 06.10.2004 09:26
Кстати, если уж ты используешь конструкцию With|End With (что весьма рационально), то используй ее по максимуму:

Код:
With objWord.Selection.Find
.ClearFormatting
.Replacement.ClearFormatting

.Text = "ABC"
.Replacement.Text = box_estacion_base.Text
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Автор: xntx
Дата сообщения: 06.10.2004 17:38
Troitsky
спасибо! работает

Цитата:
Кстати, если уж ты используешь конструкцию With|End With (что весьма рационально), то используй ее по максимуму:

ну я вообще не вдавался в код, я просто глянул как ворд сделал...

Добавлено
и вопрос немного не в тему, как склеивать два стринга?
Автор: Troitsky
Дата сообщения: 06.10.2004 17:50

Цитата:
как склеивать два стринга?


Пример:

Код:
Dim str1, str2, str3 As String
str1 = "ПАР"
str2 = "НИК"
str3 = str1 & str2 ' str3 = "ПАРНИК"
Автор: That_B
Дата сообщения: 06.10.2004 18:16
Есть очень хорошие статьи по этой теме
http://www.vbstreets.ru/VB/Articles/default.aspx

Работа с Word. Статья первая
.............
Работа с Word. Статья девятая
Автор: xntx
Дата сообщения: 06.10.2004 19:58
That_B
тоже спасибо


хм, странно, из одного семпла взял такой диалог открытия файла:

Код: Dim sTemplate As String
With dlgCommonDialog
.DialogTitle = "Open"
.CancelError = False
.Filter = "Word Documents (*.doc)|*.doc"
.ShowOpen
If Len(.FileName) = 0 Then
Exit Sub
End If
sTemplate = .FileName
End With
Автор: Troitsky
Дата сообщения: 06.10.2004 20:22

Цитата:
диалог открытия файла

Я немного не понял...
Ты хочешь чтобы у тебя VB вываливал такой диалог или Word? Т.е. в какой момент ты ожидаешь появление этого диалога и что ты от него хочешь?

Но в любом случае, если не ошибаюсь, придется подключать Microsoft Common Dialog Control

Автор: xntx
Дата сообщения: 06.10.2004 21:14
Troitsky
нужен диалог самый что ненаесть обычный (что во всех прогах) который дает выбрать файл с диска, потом то что возвращает этот диалог, я передам ворду для открытия.
присоединил Microsoft Common Dialog Control, ничего, еще присоединил Microsoft Windows Common Controls 6.0, тоже ничего, все та-же ошибка

Добавлено
хмм, а еще, почему objWord не доступен из других Sub'ов?
Автор: Troitsky
Дата сообщения: 06.10.2004 21:50
Такс...
Значит диалог всеже VB тебе будет показывать.
В среде разработки Microsoft Visual Basic в Project/Components подключай компонент Microsoft Common Dialog Control. Помещай его как компонент на форму и работай уже с ним.

Добавлено

Цитата:
почему objWord не доступен из других Sub'ов?

Значит ты присваиваешь ссылку на объект только в одной конкретной процедуре и тут же убиваешь ее.
Попробуй объявить эту объектную переменную на уровне проекта, но только не забудь освободить объект при окончании работы программы.
Автор: xntx
Дата сообщения: 06.10.2004 22:39
Troitsky
боже, как же это жутко чувствовать себя опять ламером...

Цитата:
Значит ты присваиваешь ссылку на объект только в одной конкретной процедуре и тут же убиваешь ее.
Попробуй объявить эту объектную переменную на уровне проекта, но только не забудь освободить объект при окончании работы программы.

я так понимаю что на уровне проэкта, это вне sub'ов, так? а как ее убивать при выходе? какое-нибудь событие onFormClose?
Автор: Troitsky
Дата сообщения: 06.10.2004 23:03

Цитата:
я так понимаю что на уровне проэкта, это вне sub'ов, так?

Короче вверху в самом


Цитата:
а как ее убивать при выходе?

Set objWord = Nothing
Автор: xntx
Дата сообщения: 10.10.2004 18:04
прикручивание
Цитата:
Microsoft Common Dialog Control

не помогает...
неужели самому писать диалог открытия файла нужно?
Автор: Troitsky
Дата сообщения: 10.10.2004 20:37

Цитата:
не помогает...
неужели самому писать диалог открытия файла нужно?


Ничего самому писать не надо. Погоди. Объясни подробнее что и для чего не помогает. И как ты пытаешься это проделать.
Автор: xntx
Дата сообщения: 10.10.2004 21:08
Troitsky
я активирую в Components галочку
Цитата:
Microsoft Common Dialog Control

а потом тестирую прогу, он
Цитата:
ругается на выделенную строку

Автор: Troitsky
Дата сообщения: 10.10.2004 22:46
Кроме того, что ты "активируешь в Components галочку", ты еще должен добавить этот контрол на форму и дать ему название (судя по куску кода, который ты привел) dlgCommonDialog.
Автор: xntx
Дата сообщения: 11.10.2004 02:39
Troitsky
все, это уже заработало, спасибо
Автор: timprog
Дата сообщения: 27.02.2005 14:26
Как с помощью VB открыть вордовскую страницу с текстом и разбить весь текст на блоки по пять предложений в каждом. Я в vb не шарю, поэтому нужна ваша помощь.
Автор: zeleniy
Дата сообщения: 28.02.2005 09:01

Цитата:
Вот незадача... Нужно на VB открыть вордовский документ, повставлять слова всякие (в определенные места) а потом его сохранить с определенным именем.


У меня есть тоже приблизительно такая же задача. Как я ее решил.
В Word есть очень хорошая вещь "поля" создаем документ. Устанавливаем две панели - "формы" и "элементы управления".
С помощью панели "формы" создаем поля в документе в том месте где нам надо. Далее я делаю защиту документа, т.е.е разрешаю пользователю запись только в эти поля. Далее внешняя программа открывает документ Word ( не показывая его) заносит в поля нужуную информацию и показывает его пользователю чтобы он заполнил свои поля. По окончании ввода пользователь нажимает кнопку (command button) которая фиксирует данные в полях и закрывает их от редактирования.
Автор: altamatick
Дата сообщения: 15.11.2014 16:32
Помогите пожалуйста... Уперто не работает =(

Word = CreateObject("Word.Application")
Word.visible = True
oDoc = Word.Documents.Add(ProtocolTemplate)

With Word.Selection.Find
.ClearFormatting()
.Replacement.ClearFormatting()
.Text = "[слово]"
.Replacement.Text = "Замена!!!!!!!!"
.Forward = True
'.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute(Replace:=wdReplaceAll)
End With

ругаеться на wdFindContinue и wdReplaceAll - переменная не объявлена

Добавлено:
Может кому пригодиться, вот так работает

Dim WordApp = New Word.Application
WordApp.Visible = True
Dim oDoc = WordApp.Documents.Add(ProtocolTemplate)

With WordApp.ActiveDocument.Application.Selection.Find
.ClearFormatting()
.Replacement.ClearFormatting()
.Text = "["
.Replacement.Text = "Замена!!!!!!!!"
.Forward = True
.Wrap = Word.WdFindWrap.wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute(Replace:=Word.WdReplace.wdReplaceAll)
End With

Страницы: 1

Предыдущая тема: TThread и С++ Builder 4.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.