powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сохранить измененный документ Word в поле OLE
25 сообщений из 88, страница 3 из 4
Как сохранить измененный документ Word в поле OLE
    #37018034
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
George Ru,

Всё нормально. Разберёмся:)
Не будем обращать внимания на мелочи.
Мне Ваш пример сразу понравился. Круто:)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сохранить измененный документ Word в поле OLE
    #38105095
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую форумчан!

George Ru...
Я вывожу через закладки в документе:
Код: vbnet
1.
    oDoc.Bookmarks.Item("ДоговорНомер").Range.Text = Me.Договор№


Но может быть есть ещё способы? Поделитесь опытом.
У меня вопрос к знатокам.
Попробовал заменить закладку на текст, получаемый из базы данных как в в/у коде. На первый раз получается, всё нормально. Я вот не пойму, а почему на 2-раз, т.е. когда в этом же Word шаблоне хочу повторно заменить закладку на другой текст программа ругается, что нет такой закладки уже? После замены теста закладка безвозвратно уничтожается что ли?
А как сделать наподобие Excel? Там в любой ячейке можно хоть миллион раз менять текст.
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105231
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

проверил у себя в 2003 офисе , сделал форму в полем и кнопкой в аксе, повесил на кнопку код

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Кнопка2_Click()
Dim app As Object
Set app = CreateObject("Word.Application")
app.Documents.Add "c:\basic\фамилия.doc"
app.Visible = True
With app.ActiveDocument
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
End With
End Sub



всё работает нормально ... естественно , сколько раз нажимаю кнопку - столько экземпляров документа и создается
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105279
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

может речь о 2007? там немного по другому будет , типа этого

Код: vbnet
1.
2.
WordObj.Selection.GoTo what:=wdGotoBookmark,Name:="FullName"
WordObj.Selection.TypeText rsCust![ContactName]
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105642
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше без итема и селекта
Код: vbnet
1.
2.
3.
4.
 With oWord.ActiveDocument
.Bookmarks("DateDogovor").Range.Text = Format(rs.Fields("DateDogovor").Value, "dd mmmm yyyy")
'..............................
End With
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105804
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimportstudieren,

проверил у себя в 2003 офисе , сделал форму в полем и кнопкой в аксе, повесил на кнопку код

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Кнопка2_Click()
Dim app As Object
Set app = CreateObject("Word.Application")
app.Documents.Add "c:\basic\фамилия.doc"
app.Visible = True
With app.ActiveDocument
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
End With
End Sub



всё работает нормально ... естественно , сколько раз нажимаю кнопку - столько экземпляров документа и создается
Нет, Вы меня не совсем поняли. Вот Вы 1 раз меняете текст. Попробуйте 2 раза поменять, типа так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Кнопка2_Click()
Dim app As Object
Set app = CreateObject("Word.Application")
app.Documents.Add "c:\basic\фамилия.doc"
app.Visible = True
With app.ActiveDocument
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
End With
End Sub


У меня ситуация такая. Я 1 раз открываю шаблонный текст, всё там программно меняю и отправляю документ на печать. Затем сразу же в этом же файле хочу менять текст закладок ещё раз и таким образом хочу продолжить работу программы пока не закончится цикл. Вот тут у меня программа кричит, что нету такой закладки уже. Как так?
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105822
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

при таком коде как вы привели

автор
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Кнопка2_Click()
Dim app As Object
Set app = CreateObject("Word.Application")
app.Documents.Add "c:\basic\фамилия.doc"
app.Visible = True
With app.ActiveDocument
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
.Bookmarks.Item("FullName").Range.Text = Nz(Me.Поле0, "")
End With
End Sub




выводится типа так

Поле0Поле0

может вы в своем коде (который вы не приводите) выделяете вставленный текст и удаляете его перед очередной вставкой текста в закладку? В таком случае у вас будет вместе с выделенным текстом удаляться и закладка
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38105895
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport,

Вот прилагаю файл. Когда запускаю вот этот код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Test01()
    On Error GoTo Err_handler
    With ThisDocument
        .Bookmarks("Amount").Range.Text = "123456"
        .Bookmarks("Amount").Range.Text = "654321"
    End With
    Exit Sub
    
Err_handler:
    MsgBox Err.Description
End Sub

то получаю вот такую ошибку:
---------------------------
Microsoft Word
---------------------------
Запрашиваемый номер семейства не существует.
---------------------------
OK
---------------------------
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106384
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что же получается? Одна и та же закладка 2 и более раза не может быть использована?
Если да, то это печально.
Может просто код будет другой? Может есть способ побороть?
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106413
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studierenЭто что же получается? Одна и та же закладка 2 и более раза не может быть использована?
Если да, то это печально.
Может просто код будет другой? Может есть способ побороть?
видимо - да,
после присваивания значения - эта букмарка исключается из коллекции ...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub Test01()
    On Error GoTo Err_handler
    With ThisDocument
Debug.Print ThisDocument.Bookmarks.Count
        .Bookmarks("Amount").Range.Text = "123456"
Debug.Print ThisDocument.Bookmarks.Count
        .Bookmarks("Amount").Range.Text = "654321"
    End With
    Exit Sub
    
Err_handler:
    MsgBox Err.Description
End Sub


Код: vbnet
1.
2.
 2 
 1 
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106440
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studierenМожет есть способ побороть?
вместо букмарков, использовать поля - не вариант ?
Код: vbnet
1.
2.
ThisDocument.TextBox1.Value = "123456"
ThisDocument.TextBox1.Value = "654321"
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106468
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112,

А это как? Вот у меня сплошником идёт длиннющий текст, внутри которого некоторую часть я отметил закладкой. Заменяемый текст у меня может быть достаточно длинным настолько, что текст может перейти на следующую строчку. Ну к примеру название фирмы может быть достаточно длинным. А если в текстбокс не уместиться? Как тогда?
Или в ворде текстбоксы "резиновые"?
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106512
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studieren,

у меня как то так вот получилось

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub Test01()
    Dim n As String
    n = InputBox("Введите текст для вставки")
    Selection.GoTo What:=wdGoToBookmark, Name:="Amount"
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=n
    Selection.Delete Unit:=wdCharacter, Count:=6
    n = InputBox("Введите текст для вставки")
    Selection.GoTo What:=wdGoToBookmark, Name:="Amount"
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=n
    Selection.Delete Unit:=wdCharacter, Count:=Len(n)
End Sub



это естественно в модуль документа ворда надо вставлять ,.... и закладки при этом не удаляются
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38106577
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport,

Спасибо за идею. Правда в конце чуть-чуть подправил код.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub Test03()
    Dim n As String
    n = InputBox("Введите текст для вставки")
    Selection.GoTo What:=wdGoToBookmark, Name:="Amount"
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=n
    Selection.Delete Unit:=wdCharacter, Count:=6
    n = InputBox("Введите текст для вставки")
    Selection.GoTo What:=wdGoToBookmark, Name:="Amount"
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=n
    Selection.Delete Unit:=wdCharacter, Count:=Len(ActiveDocument.Bookmarks("Amount").Range)
End Sub



P.S.
Вот только select не нравиться, ибо в реальном шаблоне многовато закладок. Приходится скакать. Ну это уже "издержки производства". В смысле "так, мелочи ...". :)
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107272
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

Ну намудрили, достаточно и так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Sub test()
Dim rng As Range
Set rng = ActiveDocument.Bookmarks("test").Range
rng.Text = "123"
rng.Text = "12345"
rng.Text = "Ups"
Set rng = Nothing
End Sub
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107274
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если используете позднее связывание, объявляйте rng, как Object или Variant
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107283
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R Dmitry,

ну почему ж так сразу и "намудрили"? Вы попробуйте вашу подпрограмму повторно выполнить в этом же документе. Получите соответсвующее сообщение об отсутствии закладки
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107286
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_rusimport,

Что именно повторно ?
у меня все отрабатывает корректно, для возврата в исходное состояние нужно использовать хитрый трюк
rng.Text = ""
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107290
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попытаюсь объяснить, в моем примере вы работаете с объектом Range который имеет начальную позицию в документе от указанной закладки, с этим объектом Вы и работаете. А в случае если Вы используете закладку повторно то и вставка текста происходит опять с этого места.
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107364
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R Dmitry,

Спасибо за примерчик!
Эксперименты показали вот что:
1) Оказывается закладка должна быть пустой, в смысле должна иметь значение пустой строки ("")!!! Иначе после замены значения закладка исчезает.
2) Обязательно в конце после завершения работы программы нужно вернуть пустую строку, иначе после повторного запуска программы новые значения слипаются к старым. Т.е. не заменяются значения закладки, а сцепляются к тем, что осталось от предыдущего вызова программы.

Работать с отдельным объектом Range (т.е. объявлять отдельно) вовсе не обязательно.
Код: vbnet
1.
2.
3.
4.
5.
6.
With ActiveDocument.Bookmarks("test").Range
    .Text = "123"
    .Text = "12345"
    .Text = "упс"
    .Text = ""
End With



P.S.
Этот трюк (фича) намного эффективнее чем предыдущий код.

Всем участниками большое спасибо! Ну а R Dmitry отдельное преогромное СПАСИБО!!!! :)
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107409
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R Dmitry,

Пожалуй тоже отмечусь

Спасибо , с помощью вашего примера разобрался. В изначально приведенном примере studieren под закладку использовались несколько символов в документе и поэтому при отработки кода приведенного R_Dmitry в этом документе закладка удалялась. В примере же , приведенном самим R_Dmitry, под закладку в документе отводится лишь одна определенная позиция, и поэтому закладка после отработки того же кода остается в документе.
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #38107842
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenРаботать с отдельным объектом Range (т.е. объявлять отдельно) вовсе не обязательно.

Не торопитесь с выводами, сделайте две закладки и прогоните сначала один код затем второй.
Я так понял Вы в цикле планируете создавать различные документы, в одном запуске.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub test2()
With ActiveDocument.Bookmarks("test").Range
.Text = "123"
.Text = "12345"
.Text = "ups"
'.Text = ""
End With
With ActiveDocument.Bookmarks("test2").Range
.Text = "123"
.Text = "12345"
.Text = "ups"
.Text = ""
End With
With ActiveDocument.Bookmarks("test").Range
.Text = "123"
.Text = "12345"
.Text = "ups"
.Text = ""
End With
End Sub



=Я использую так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub test()
Dim oDict As Object, i&
Set oDict = CreateObject("scripting.dictionary")
For i = 1 To ActiveDocument.Bookmarks.Count
Set oDict.Item(ActiveDocument.Bookmarks(i).Name) = ActiveDocument.Bookmarks(i).Range
Next
For i = 1 To 2
oDict.Item("test").Text = "test===" & i
oDict.Item("test2").Text = "test2===" & i
Next
For i = 1 To ActiveDocument.Bookmarks.Count
oDict.Item(ActiveDocument.Bookmarks(i).Name).Text = ""
Next
Set oDict = Nothing
End Sub

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сохранить измененный документ Word в поле OLE
    #39686522
Сергей НФ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
George Ru,

а как бы Вы написали свой код
>
Set oDoc = oBOF.Object
oDoc.Bookmarks.Item("ДоговорНомер").Range.Text = Me.Договор№
oDoc.Bookmarks.Item("ДоговорДата").Range.Text = Me.Дата
<,
если бы это была рабочая книга Excel с вкладками, например книга "Книга1", вкладка "Табл.1", где ячейке A1 надо присвоить значение, да хоть ваше Me.Договор№

Спасибо за ответ
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как сохранить измененный документ Word в поле OLE
    #39941372
Дар1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Я окончательно запутался.
В начале речь шла о коде в модуль формы Акссес, потом в модуль документа Ворд.
Каков все же алгоритм действий.
У меня задача в шаблон приказа о приеме на работу внести в определенные поля № приказа, дату, ФИО и прочее. Затем сохранить это в отдельном вордовском документе.
С чего мне начать, в Акссесе я все подготовил, как в ворд перекинуть?
...
Рейтинг: 0 / 0
Как сохранить измененный документ Word в поле OLE
    #39941401
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дар1
в Акссесе я все подготовил, как в ворд перекинуть?
НЕБОЛЬШОЙ, почти стандартный код в аксесс, если в шаблоне нет картинок и таблиц
если есть таблицы -чуть больше кода
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 3 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сохранить измененный документ Word в поле OLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]