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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 14:58   #1
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию Вставить номера страниц в виде текста

Добрый день.

возникла одна бредовая задача.
Подскажите, пожалуйста, если у кого есть какие-нибудь идеи..

задача такая - вставить внизу страницы номера страниц. Но только не в виде полей, а в виде текста (то есть обычный текст 1, 2, 3 и т.д.)

Может кто макрос какой подсобит? ну или идейку/ссылку какую полезную даст?

Буду весьма признателен!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.01.2011, 16:12   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Макрос по перебору страниц не сложен. Но судя по задаче важно еще и где вставлять: в тексте (последней строкой на странице) или в виде надписи (в районе колонтитула). Уточните...
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 19.01.2011, 17:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вождь, прежде всего спасибо огромное за ответ!

Макрос по перебору страницен нужен.
Проще, имхо вставлять последней строчкой (я понимаю, что при этом остальные страницы "поплывут" - ничегот страшного - мне главное, чтобы после расстановки номеров страниц уже ничего не изменялось!

Про надпись я, честно говоря, вообще не подумал.
Возможно, что это даже ещё лучше будет.

Поможете?... (с любым вариантом...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.01.2011, 17:59   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Вариант для последней строки.
Код:
Public Sub Номер_страницы_в_последней_строке()

Dim D As Word.Document
Dim P As Word.Pane
Dim R As Word.Range
Dim N&
    
    Set D = ActiveDocument ' документ
    Set P = D.ActiveWindow.ActivePane ' панель
    P.View.Type = wdPrintView ' разбивка на страницы
    N = 1 ' номер страницы
    
    ' перебор страниц
    Do While N < P.Pages.Count
        ' последняя строка страницы
        With P.Pages(N).Rectangles
            With .Item(.Count).Lines
                Set R = .Item(.Count).Range
            End With
        End With
        ' вставка номера
        R.Collapse wdCollapseStart
        If R.Start <= 0 Then
        ElseIf AscW(R.Previous.Text) >= 30 Then
            R.InsertBefore vbCr
        End If
        R.InsertAfter CStr(N) & vbCr
        Set R = R.Paragraphs.Last.Range
        ' формат номера
        R.Style = wdStyleNormal
        R.ParagraphFormat.Alignment = wdAlignParagraphCenter
        ' разрыв страницы
        R.Collapse wdCollapseEnd
        R.InsertBreak wdPageBreak
        ' следующий номер
        N = N + 1
    Loop
    
    ' вставка на последней станице
    Set R = D.Range
    R.Collapse wdCollapseEnd
    R.InsertBefore vbCr & CStr(N)
    Set R = R.Paragraphs.Last.Range
    R.Style = wdStyleNormal
    R.ParagraphFormat.Alignment = wdAlignParagraphCenter
        
End Sub
Минус макроса, что в последней строке обязательно должен быть простой текст, а не например таблица. Поэтому вариант с надписью удобнее и макрос попроще, но опять же смотря для чего. Чуть позже закину...
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 19.01.2011, 18:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вождь, спасибо большое-пребольшое!

Цитата:
в последней строке обязательно должен быть простой текст
в моём случае асболютно не критично- весь мой документ - исключительно текст - без стилей, форматирования и прочая, прочая... да ещё и моноширным шрифтом (Courier New)...

Цитата:
вариант с надписью удобнее и макрос попроще, но опять же смотря для чего. Чуть позже закину...
Спасибо опять таки!
p.s. Если возникнут проблемы/сложности при реализации, Вы особо не упорствуйте... Надеюсь, я не сильно много Вашего времени отнял?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.01.2011, 19:03   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Serge_Bliznykov, а вариант оставить поля в клонтитуле а потом сделать
Fields.Update и Fields.Unlink вас никак не устроит ?
Или необходимо что бы номер страницы присутствовал именно в теле документа?
Aent вне форума Ответить с цитированием
Старый 19.01.2011, 20:13   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Aent, спасибо!

Цитата:
Сообщение от Aent
Fields.Update и Fields.Unlink вас никак не устроит ?
мне стыдно признаться, но я не знаю, что это за Fields.Unlink...
можно пояснить чуток?

при печати они обновляться не будут?
А вообще, для чего нужно то, что я пытаюсь сделать:
если я выделю из этого документа, скажем 28 страницу и 100 страницу и эти две страницы перенесу в новый документ. У них останутся номера 28 и 100 в этом документе, где кроме этих страниц больше ничего не будет?
Если да - то да, такое решение вполне устроит!!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.01.2011, 22:31   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что это за Fields.Unlink
Превращение полей в то, что в них вычислилось, в данном случае в текст.

Например, конструкция {page}*) при обновлении (по F9) вычисляет номер страницы, где она впечатана (неважно, в колонтитуле или в основном тексте) — происходит обновление (update) поля — и отображает его, по Shift-F9 (или Alt-F9).

А когда мы жмём Ctrl-Shift-F9 (разорвать связи), выделив это поле (или весь текст), то получаем обычный текст.
___________________________________ __
*) фигурные скобки надо вводить по Ctrl-F9

Последний раз редактировалось Sasha_Smirnov; 19.01.2011 в 22:36. Причина: сноска.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.01.2011, 22:58   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А когда мы жмём Ctrl-Shift-F9 (разорвать связи), выделив это поле (или весь текст), то получаем обычный текст.
Спасибо!!!

не, я не такой тёмный, я знаю, что такое поля в MS Word, только не знал, что их можно превратить в текст! Теперь знаю! Спасибо за науку!

Погодите ка... А если поле в колонтитуле.
И мы превращаем это в простой текст - то что будет на каждой странице?! Или для колонитулов такой трюк проделавать нельзя?...

почему спрашиваю - потому как рабочий файл на работе -
и смогу все советы/(и ма-ма-макрос == код (с) уважаемого Вождя) проверить только завтра!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.01.2011, 03:47   #10
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Большое спасибо Serge_Bliznykov за поднятие интересного вопроса.
Их к сожалению последнее время очень мало

Извините, не сообразил сразу уточнить:
Если поле в колонтитуле то всё несколько сложнее
Колонтитул (Footer) общий для всего раздела.
Отдельные Footer на каждой странице можно получить если каждая страница
оформленна отдельным разделом (Section) и убрав в колонтитуле признак
"как в предыдущем".
Код:
  .Sections(i).PageSetup.DifferentFirstPageHeaderFooter = True
По поводу разделения документа на секции
можно посмотреть: http://www.sql.ru/forum/actualthread...300911&hl=word
Вопрос не тривиальный.
При конвертировании страниц в секции можно воспользоваться в цикле и конструкцией типа
Код:
ActiveDocument.Bookmarks("\Page").Range.Cut
(Вырезав страницу - вставляем её секцией в формируемый документ)
Здесь "\Page" ссылка на предопределённую встроенную закладку Word см http://support.microsoft.com/kb/182586
В Вашем случае этим можно и обойтись (без полей )
В общем же случае сложного документа IMHO целесообразно помещать номер страницы именно в footer.
Мне как то пришлось иметь дело с документом в котором требованием заказчика было наличие в колонтитуле
хэш кода по содержанию страницы

Последний раз редактировалось Aent; 20.01.2011 в 04:16.
Aent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить перекрестную сссылку в виде только номера bdfy Microsoft Office Word 1 19.12.2010 14:49
копирование текста из буфера без разрыва страниц mistx Microsoft Office Word 10 08.08.2010 17:12
Как выделить несколько страниц текста Иванов2 Microsoft Office Word 4 28.09.2009 22:24
Как вставить кусок текста в текст Tomatos Общие вопросы Delphi 5 24.09.2009 21:00
Номера страниц в оглавлении dima9 Microsoft Office Word 6 22.03.2009 13:13