Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
Господа, здравствуйте.

Есть код выброса данных в ворд по принципу нахождения куска текста.
Когда то ПЕНСИОНЕРКА помогла, за что еще раз ей спасибо.

          Set App = CreateObject("Word.Application") 
'                app.Visible = True
          App.Documents.Add OpenFiles
          Set odoc = App.ActiveDocument
          With App
              ' присваивание значений
              j = 0
              Do While j < i ' настройка форматирование выделяемого и редактируемого куска
                  .Selection.Find.ClearFormatting
                  .Selection.Find.Replacement.ClearFormatting
                  With .Selection.Find.Replacement
                      .Font.Color = 0
                  End With
                  With .Selection.Find
'                        Debug.Print xm(j), ym(j)
                      .Text = xm(j)
                      If ym(j) = " - " Then
                          .Replacement.Text = " "
                      Else
                          .Replacement.Text = ym(j)
                      End If
                      .Wrap = 1
                      .Format = True
                      .MatchCase = False
                      .MatchWholeWord = False
                      .MatchWildcards = False
                      .MatchSoundsLike = False
                      .MatchAllWordForms = False
                  End With
'                  .Selection.Find.Execute Replace:=2  сразу было так
'                  If .Selection.Find.Execute() = True Then  - вычитал на просторах про проверку перед заменой

'                 вылетает здесь
                  If .Selection.Find.Execute() = True Then .Selection.Find.Execute Replace:=2
' Replace=wdReplaceAll=2 - заменять все найденные
                  j = j + 1
              Loop
              App.Selection.HomeKey Unit:=6
              DoEvents
          End With

Работало несколько лет на нескольких компьютерах(но не много)
стало ИНОГДА бить ошибку в
.Selection.Find.Execute Replace:=2

порылся на просторах, вычитал про проверку найденного перед заменой и переписал
If .Selection.Find.Execute() = True Then .Selection.Find.Execute Replace:=2

но проблему не решил
ошибка
5833
An error occurred while saving undo information
В англ не силен, с транслейтом - Ошибка при сохранении отменить информацию

Кто нибудь сможет подсказать, что не так?
27 сен 17, 14:15    [20826719]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
А файл сильно большой? Похоже, ресурсов не хватает на сохранение информации для отмены.
Можно попробовать делать помежуточные сохранения файла.
27 сен 17, 16:22    [20827188]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
MrShin,

Файл шаблона весит всего 35кб
другое дело, что вставок более 30...
т.к. работаю с шаблоном, то сохранять нужно по "адресу"
а потом пересохранение - не будет спрашивать на перезапись файла?
вечером попробую...
27 сен 17, 16:26    [20827202]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
Игортан
вставок более 30

Ну, это совсем мало. В другом причина, скорее всего.
27 сен 17, 16:42    [20827259]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
наутилус
Member

Откуда: UA
Сообщений: 1176
Игортан
MrShin,
т.к. работаю с шаблоном, то сохранять нужно по "адресу"
а потом пересохранение - не будет спрашивать на перезапись файла?
вечером попробую...

ну так сделайте первый раз сохранение SaveAs, а все последующие просто Save
ругаться на это не будет
27 сен 17, 16:47    [20827276]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4078
Игортан
Работало несколько лет на нескольких компьютерах(но не много)
стало ИНОГДА бить ошибку в
.Selection.Find.Execute Replace:=2


предполагаю, что длина заменяющего текста длиннее 255 символов
27 сен 17, 20:09    [20827681]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
ПЕНСИОНЕРКА,

Скорее всего маловероятно.
Поля в таблице - текстовые
переменная string, точнее массив, вмещает больше

Проследить за этим так вот не смогу.
Но, спасибо за идею.
В обработчик ошибок загоню "строку-значение", на котором ошибка вылетает.
Попытаюсь сравнить результат нескольких ошибок

MrShin
Можно попробовать делать помежуточные сохранения файла.

наутилус
ну так сделайте первый раз сохранение SaveAs, а все последующие просто Save
ругаться на это не будет


пока добрался до компа, обдумывал....
в данном конкретном случае важнее не получить файла вовсе, чем не полностью заполненный.
Это важный отчетный документ. Так что вынужден отказаться от идеи.
Хотя безусловно, здрава.
27 сен 17, 22:55    [20827842]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
наутилус
Member

Откуда: UA
Сообщений: 1176
Игортан,

тогда ловите ошибку и если она входит в разряд критических - очищайте документ и сохраняйте. т.е при нормальной работе будут промежуточные сохранения, при ошибке получат пустой документ.
еще, как продолжение идеи - делайте в шапке надпись "неправильный документ, тестирование" крупным шрифтом. по заполнению всех данных, последним действием заменяйте эту строку пустой.
т.е если вылетит непредвиденно - в шапке будет предупреждающая пользователя надпись, что документ использовать нельзя.
27 сен 17, 23:40    [20827895]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
наутилус,

да, оплел код и номерами строк(вероятно я слукавил, сказав, что ошибку бьет именно в том месте, я так предполагаю...)
и обработкой ошибок в выводом состояния переменных в момент ошибки.
Все это дистанционно и редко, буду собирать статистику
потом соответственно буду смотреть
28 сен 17, 02:23    [20827965]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10929
господа, автоматизация сделанная подобным образом перестала работать с вордом 2016 . возможно кто то сталкивался. может секьюрити настройки или компоненты какие надо доустановить. вкоде аксесса происходит ошибка привызове любого метода ворда
29 сен 17, 13:25    [20831596]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
наутилус
Member

Откуда: UA
Сообщений: 1176
MsDatabaseru
господа, автоматизация сделанная подобным образом перестала работать с вордом 2016 . возможно кто то сталкивался. может секьюрити настройки или компоненты какие надо доустановить. вкоде аксесса происходит ошибка привызове любого метода ворда


не знаю что за ошибки у вас, у клиента недели две назад после апдейта офиса 2016 (Вин10, обновления были обновлениями безопасности) перестали работать все VBA функции и процедуры (из Access формировались документы Word).
полечили удалением и переустановкой офиса. отключили обновления - всё заработало как прежде
29 сен 17, 13:36    [20831631]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10929
компов много, поставили на все 64битную версию. с одного дистрибутива. в дистрибутиве вложен хотфикс kb2999226 на компах разные ос от7 до10 с разными сп
29 сен 17, 13:45    [20831664]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
наутилус
Member

Откуда: UA
Сообщений: 1176
MsDatabaseru
вкоде аксесса происходит ошибка привызове любого метода ворда

текст ошибки озвучьте. чего гадать то?
29 сен 17, 13:55    [20831712]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10929
была галка по умолчанию открывать документы оутлук и прочих нередактируемых документов в режиме тольуо чтения. при этом при попытке вызова любого метода ворда приводящего к изменениям выскакивал рантайм еррор
29 сен 17, 14:36    [20831846]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Анатолий ( Киев )
Guest
Игортан, у меня вопрос по вашему коду. Вы открываете документ и сразу начинаете работать с
App.Selection, но перед этим ничего не выделяете. Как это работает? Если искать нужно во всем документе, то почему не в объекте odoc.Content ?
Игортан
т.к. работаю с шаблоном
Если у вас шаблон, то правильнее создать в нем 30 меток (bookmark) и заполнять их? Примеров уйма.
29 сен 17, 14:38    [20831854]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
Анатолий ( Киев )
правильнее создать в нем 30 меток (bookmark) и заполнять их

Или вообще сделать Mail Merge - вставить поля и заполнять их напрямую из базы, так работает быстрее.
29 сен 17, 16:04    [20832153]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4078
MrShin
Анатолий ( Киев )
правильнее создать в нем 30 меток (bookmark) и заполнять их

Или вообще сделать Mail Merge - вставить поля и заполнять их напрямую из базы, так работает быстрее.


как при этом действовать, если длина заменяющего текста более 255 символов или номер договора(или дата) повторяется 10 раз или они к коллонтитулах
29 сен 17, 16:45    [20832283]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
aleks222
Guest
ПЕНСИОНЕРКА
MrShin
пропущено...

Или вообще сделать Mail Merge - вставить поля и заполнять их напрямую из базы, так работает быстрее.


как при этом действовать, если длина заменяющего текста более 255 символов или номер договора(или дата) повторяется 10 раз или они к коллонтитулах


Освоить, таки, закладки и ссылки на них.
29 сен 17, 19:01    [20832476]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
ПЕНСИОНЕРКА
как при этом действовать, если длина заменяющего текста более 255 символов или номер договора(или дата) повторяется 10 раз или они к коллонтитулах

Абсолюно никаких проблем со всем этим в рассылках нет. Поле воспринимает тип Memo - хоть диссертацию вставляй, одно и то же поле можно вставить сколько угодно раз, в том числе и в колонтитулы. Единственная проблема - когда в один документ нужно вставить поля из нескольких записей, но тут и букмарки, и поиск-замена также не помогут, нужно через VBA таблицу "рисовать"
30 сен 17, 07:50    [20833038]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
Ну и еще в пользу рассылок - сами документы гораздо более читабельны, чем при методе с букмарками, которые не видимы - в рассылках сразу видно форматирование, поля могут еще дополнительные действия над данными выполнять - изменять регистр, добавлять текст и т.п. Ворд также сам проверит на наличие ошибок - если имя поля базы данных указан неверно, программить по минимуму нужно. В общем, я не вижу никаких преимуществ букмарков перед рассылками. Если назовете - буду благодарен. Врочем, вполне можно совмещать обе технологии в одном документе.

К сообщению приложен файл. Размер - 16Kb
30 сен 17, 08:03    [20833040]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
Анатолий ( Киев ),
Не ожидал, что тема без меня всплывет назад...

Анатолий ( Киев )
Если у вас шаблон, то правильнее создать в нем 30 меток (bookmark) и заполнять их? Примеров уйма

по этому и ушел от закладок
ПЕНСИОНЕРКА
... или номер договора(или дата) повторяется 10 раз ...х


MrShin
Или вообще сделать Mail Merge - вставить поля и заполнять их напрямую из базы, так работает быстрее.

самое интересное, что когда то, до меня, было так, точнее показывали пример.
Мне правда не понравилось, вопросы возникали по подключению к данным.
Решил сделать как умею(закладки), а потом, по развитию, нужно было одинаковые вставки делать, решил переделать на нынешний - от ПЕНСИОНЕРКИ.

Ну и вероятно веский аргумент - легкость создания шаблона самим оператором.
Есть маленькая спецификация, по выводимым меткам. Делай свой внешний вид, какой захочешь.
На сколько я помню, в Mail Merge придется прописывать источник в Word файле.
MrShin
Если назовете - буду благодарен. Впрочем, вполне можно совмещать обе технологии в одном документе.

Внешний вид шаблона word получается идентичен вашему, один в один.
За счет циклов код не большой.
Больше кода до и после вставки значений.
Ошибка, с которой я столкнулся - редкая, пока не повторилась, просто жду.
Буду знать строку и состояние переменных в момент ошибки. Потом отпишусь.
2 окт 17, 12:12    [20835954]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 705
Анатолий ( Киев )
Игортан, у меня вопрос по вашему коду. Вы открываете документ и сразу начинаете работать с
App.Selection, но перед этим ничего не выделяете. Как это работает? Если искать нужно во всем документе, то почему не в объекте odoc.Content ?

Вот это, конечно, правильный вопрос...
Т.к. ленив ( иногда прихожу к такому выводу), то в работающий код не лезу...
Типа не мешай машине работать, не ремонтируй...

Значит нужно покопаться в этом глубже...
Спасибо за вопрос.
2 окт 17, 12:18    [20835982]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт в Word  [new]
MrShin
Member

Откуда:
Сообщений: 842
Игортан
На сколько я помню, в Mail Merge придется прописывать источник в Word файле

Нет, он формируется парой строк VBA кода. В файле достаточно только вставить поля. Имя поля можно написать произвольное, ошибка при неправильном имени возникает только на этапе Merge
2 окт 17, 12:44    [20836043]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить