Проблема с закладками при взаимодействии с приложением WORD из Access
Рейтор К.И.
Дата: 03.12.2009 09:41:12
Уважаемые коллеги, подскажите, пожалуйста, как решить следующую проблему.
При добавлении текста в документ Word из Accessa пользуюсь закладками.
Примерно, так:
objWord.Selection.GoTo What:=wdGoToBookmark, Name:="Организация"
objWord.Selection.TypeText "ООО Рога и копыта"
Однако закладки при этом удаляются. Как их сохранять, чтобы в последствии возможно было обновлять значения в местах, помеченных этими закладками.
Заранее благодарен.
П-Л
Дата: 03.12.2009 10:01:05
Я храню файл с закладками неизменным и каждый раз генерю на основании его новый документ.
Попробуйте записать в ворде макрос вставки новой закладки при уже введенном тексте и воспроизведите его в аксесе. Т.е. вставили тект на месте закладки - закладка пропала - выделили вставленный тект - создали закладку (со старым именем).
Рейтор К.И.
Дата: 03.12.2009 10:17:04
задача как раз и состоит в том, чтобы не создавать документ вновь, так как его необходимо периодически редактировать. Закладок много и вследствие редактирования документа их позиции будут меняться. Поэтому заново создавать закладки "геморно".
Уточню: документ, с которым нужно работать - проект искового заявления в арбитражный суд. Как правило, с первого захода создать такой документ не удается. Часто смещается срок подачи заявления. Соответственно, необходимо делать перерасчет процентов или неустойки в зависимости от числа дней просрочки платежа и т.п. Access эти изменения хорошо обрабатывает, но заявление, как указано выше, в виде Accessовского отчета создать не возможно. Есть вариант со слиянием, однако Word не воспринимает запросы Accessa, в которых применяются функции пользователя. Поэтому остается один вариант - закладки.
Nebo
Дата: 03.12.2009 17:01:32
Рейтор К.И.,
а я так делаю (правда зачем NZ поставил * не помню):
strBookmark = "ДатаДоговора"
objWord.Selection.GoTo What:=wdGoToBookmark, name:=strBookmark
objWord.Selection.Bookmarks(strBookmark).Range = Nz(rst("DateArrival"), "")
CoolMind
Дата: 03.12.2009 18:22:18
Чего-то я не понял прикола :)
Тут же всё очевидно. Если требуется добавить закладку в текущую позицию, можно поступить таким способом (доработайте под свои нужды):
Dim oRange As Range
Set oRange = ActiveDocument.Bookmarks("закладка").Range
'Здесь Ваши действия с закладками
'If ActiveDocument.Bookmarks.Exists("закладка") Then ActiveDocument.Bookmarks("закладка").Delete
ActiveDocument.Bookmarks.Add "закладка", ActiveDocument.Range(oRange.End, oRange.End)
CoolMind
Дата: 03.12.2009 18:25:37
Nebo, а я помню, зачем ты поставил Nz.
Дело в том, что рекордсет может возвращать Null. В результате присваивания на этом шаге программа запросто ломается, поэтому надо превращать Null в "". Другой вариант, используемый не только в Аксессе:
objWord.Selection.Bookmarks(strBookmark).Range = rst("DateArrival") & "".
Анатолий ( Киев )
Дата: 03.12.2009 19:46:09
ИМХО, закладка удаляется, если она занимает диапазон из одного и более знакомест. Если закладка - просто позиция курсора, то она не удаляется.
Nebo
Дата: 04.12.2009 05:13:35
CoolMind |
Nebo, а я помню, зачем ты поставил Nz. Дело в том, что рекордсет может возвращать Null. В результате присваивания на этом шаге программа запросто ломается, поэтому надо превращать Null в "". Другой вариант, используемый не только в Аксессе: objWord.Selection.Bookmarks(strBookmark).Range = rst("DateArrival") & "". |
Интересно:) Спасибо:)
Рейтор К.И.
Дата: 07.12.2009 10:11:02
Все большое спасибо за отклики