Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2010, 17:56   #1
NomadV
 
Регистрация: 06.04.2010
Сообщений: 5
По умолчанию Программная работа с полями (формула)

Задача: сделать двойную нумерацию страниц, обновляемую программно.
Соответственно, в одном поле будет код { PAGE }. В данном случае код присваивается полю элементарно:
Код:
Selection.Fields(1).Code.Text = "PAGE"
Но в другом поле нужна нумерация со сдвигом, т.е. кодом поля будет уже формула { = { PAGE} + 12 } к примеру. Причем если эту формулу вбивать вручную, то фигурные скобки надо обязательно вводить сочетанием клавиш CTRL+F9. Подробнее, кому интересно, тут:
http://office.microsoft.com/ru-ru/wo...349001049.aspx
Но вот как сделать это программно?
Такой вариант:
Код:
Selection.Fields(1).Code.Text = "PAGE + 3"
не работает.
Пробовал считывать свойство текст в уже готовом поле, определять ASCII-коды фигурных скобок и вставлять их в строку функцией Chr(). Или даже просто считывать свойство .Text, заменять в нем последний символ на нужную мне цифру и обратно присваивать эту строку свойству .Text. Каждый раз синтаксическая ошибка((
Может у кого есть опыт работы с подобного рода формулами? Подскажите как их правильно писать
NomadV вне форума Ответить с цитированием
Старый 06.04.2010, 19:21   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Ну, например, так:
Код:
With ActiveDocument
       Selection.InsertFormula Formula:="=3+"
       .Fields.Add Range:=.Fields(.Fields.Count).Code.Characters(5), Type:=wdFieldPage
       .Fields.Update
End With
Ваша ошибка в том, что {=3+{PAGE}} это 2 поля а не одно.

Последний раз редактировалось Aent; 06.04.2010 в 19:24.
Aent вне форума Ответить с цитированием
Старый 06.04.2010, 23:03   #3
NomadV
 
Регистрация: 06.04.2010
Сообщений: 5
По умолчанию

Большое спасибо!
Не сразу, правда, понял, как при помощи Вашего примера можно не добавлять, а изменять уже существующую нумерацию. Кроме того в моем случае Номер страницы находится в надписи, а надпись в колонтитуле и сгруппирована с рамкой.
Пришлось еще вчитаться в довольно познавательный сайт http://markros.ru/graphics/
В итоге получилось вот такое:
Код:
Shift = 3
For Each ShapeObj In ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes
    If ShapeObj.Type = msoGroup Then
        For Each shpInShape In ShapeObj.GroupItems
          If shpInShape.textframe.HasText Then
            If shpInShape.textframe.TextRange.Fields.Count > 0 Then
                With shpInShape.textframe.TextRange
                    .Select
                    Selection.InsertFormula Formula:="=" & Shift & "+"
                    .Fields.Add Range:=.Fields(.Fields.Count).Code.Characters(5), Type:=wdFieldPage
                    .Fields.Update
                End With
            End If
          End If
        Next shpInShape
    End If
Next ShapeObj
Т.е. получается, что мы каждый раз заменяем содержимое надписи на новое. В принципе, результат работы программы меня полностью устраивает, но интересен такой вопрос: это единственный способ или формулу можно не только добавлять, но и модифицировать?
NomadV вне форума Ответить с цитированием
Старый 07.04.2010, 03:49   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Естественно формулу можно модифицировать. Но если модифицируемыми операндами являются поля, то их нужно добавлять/удалять через модификацию коллекции Fields или её элементов.
Так же не очень понятно: зачем собственно вам модифицировать формулу?
Задавайте сдвиг в поле SET и используйте затем эту закладку вместе с PAGE.
{SET SSS 3} {= SSS +{PAGE}}

Последний раз редактировалось Aent; 07.04.2010 в 03:59.
Aent вне форума Ответить с цитированием
Старый 07.04.2010, 12:35   #5
NomadV
 
Регистрация: 06.04.2010
Сообщений: 5
По умолчанию

Просто программирование в Word для меня пока малопонятно. И большинства возможностей его я не знаю. После Excel объектная модель Word выглядит довольно запутанной. Логику работы с полями и закладками я, видимо, тоже еще не до конца понял.
Где бы про это подробнее почитать? Ссылку не подкинете?
NomadV вне форума Ответить с цитированием
Старый 07.04.2010, 14:06   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Про использование полей http://www.addbalance.com/usersguide/fields.htm
Про поля в VBA - HELP по объектной модели для 2003 Word.
Так же см.:
http://msdn.microsoft.com/en-us/libr...ice.10%29.aspx
http://gregmaxey.mvps.org/Field_Macros.htm
http://www.thezcorp.com/VBACodeSamples.aspx (cм. примеры к Fields)
Кстати, для второго уровня нумерации удобно использовать поле SEQ.
Aent вне форума Ответить с цитированием
Старый 08.04.2010, 13:59   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Программное нажатие Ctrl-F9

Цитата:
Сообщение от NomadV Посмотреть сообщение
...Причем если эту формулу вбивать вручную, то фигурные скобки надо обязательно вводить сочетанием клавиш CTRL+F9. Подробнее, кому интересно, тут:
http://office.microsoft.com/ru-ru/wo...349001049.aspx
Но вот как сделать это программно?
Из окна документа Word фигурные скобки для полей вставляет
Код:
SendKeys "^{f9}", True
P/s: Aent, это, что называется, заметим в скобках. Так, для полноты.

Последний раз редактировалось Sasha_Smirnov; 08.04.2010 в 21:42.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 08.04.2010, 15:21   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Цитата:
SendKeys "^{f9}", True
Зачем же делать на VBA через пользовательский интерфейс то, что можно легко сделать через объектную модель ?
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД Access и операции с полями WishNight БД в Delphi 3 05.04.2010 13:00
Программная эмуляция джойстика overloaded0 Win Api 0 25.10.2008 00:02
программная работа с параметром Sack Microsoft Office Access 4 29.09.2008 11:22
Не могу разобраться с полями..... Mitriy БД в Delphi 5 19.07.2007 15:09
Проблема с вычисляемыми полями DeadMan БД в Delphi 3 06.06.2007 13:28