Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

В этом выпуске опубликованы следующие советы:


Word Expert - профессиональная работа с текстом

Выпуск рассылки №105 от 2008-06-26 20:29

В этом выпуске:

  1. Советы и подсказки
  2. Требуется помощь!
  3. Полезные ссылки
  4. Информация об авторских правах

Советы и подсказки

Если у вас есть идея или совет по эффективному использованию редактора Word, то пишите мне через форму контактов на сайте. Любые ваши дельные советы и подсказки будут размещены в очередных выпусках рассылки и на сайте (с указанием вашего авторства).

Календарь в Word

Ольга спрашивает: Можно ли в Word сделать маленький календарик, который можно было бы вызывать по кнопке на панели инструментов? Наподобие такого, как в Excel или как в 1С?

Можно. В зарубежном интернете есть отличная статья Мартина Грина на эту тему: A Pop-up Calendar for Word.
Мартин разрешил мне воспользоваться его опытом и опубликовать эту статью на моем сайте. Но переводить всю статью не имеет смысла: она большая и подробная; я лишь изложу ее основные моменты. В итоге, мы должны получить примерно вот такой календарь (рисунок).
Для тех, кто не хочет самостоятельно создавать календарь, в конце заметки я дам ссылку на шаблон с созданным по этой заметке календарем. Вам останется лишь загрузить его на свой компьютер.
Те же пользователи, кто работает с основном с таблицами Excel, могут найти аналогичную статью на сайте PlanetaExcel.ru.

Итак, приступим.
  1. Во-первых, создайте пустой документ Word и сохраните его как шаблон под именем WordPopupCalendar.dot. Безусловно, можно создать календарь и в глобальном шаблоне Normal.dot, чтобы он был всегда доступен, но в этот раз мы создадим новый шаблон. В дальнейшем, это позволит вам передавать ваш шаблон с календарем своим друзьям и коллегам, а доступность календаря мы обеспечим размещением шаблона в папке автозагрузок редактора Word.
  2. Далее, откройте редактор Visual Basic с помощью сочетания клавиш «Alt»+«F11». Появится пустое окно редактора. Нажмите клавишу «F7», чтобы перейти к окну кода.
  3. Теперь мы должны создать сам календарь в виде появляющегося окошка. Для этого в меню Insert выберите команду UserForm. Откроется пустая форма диалогового окна с панелью инструментов Toolbox (рисунок).
  4. Щелкните по заголовку панели Toolbox. Скорее всего, на панели отсутствует иконка для создания календаря. В этом случае следует выбрать в меню Tools команду Additional Controls. Откроется диалоговое окно, в котором найдите и установите флажок у элемента Элемент управления Календарь 11.0, как на рисунке ниже (рисунок).
    Если у вас англоязычная версия редактора Word, то этот элемент будет называться Calendar Control 11.0 (номер зависит от версии редактора).
  5. Щелкните указателем мыши на появившемся на панели Toolbox элементе Calendar и нарисуйте на форме квадрат, чтобы календарь занял всю форму. Впрочем, можете и уменьшить его размеры. Как вам будет угодно. Получится примерно так (рисунок).
  6. Теперь можно настроить свойства календаря, в частности, его внешний вид. Как вы можете видеть, календарь использует краткую форму вывода даты, что не очень красиво и удобно. Изменим это. В панели свойств (Properties - Calendar1) щелкните на правой ячейке строки (Custom) (рисунок). Откроется диалоговое окно Property Pages. Измените в нем значения на те, которые показаны на скриншоте ниже, и нажмите кнопку Применить, а затем закройте окно (рисунок).
  7. Щелкните на заголовке формы, а затем в панели ее свойств измените значение строки (Name) "UserForm1" на значение "frmCalendar", а значение строки Caption "UserForm1" на значение "Календарь - Выберите дату". Заголовок нашей формы изменится.

    Собственно, сам календарь уже готов. Но он практически бесполезен. Поэтому добавим календарю функцию выбора даты и вставки ее в документ.
  8. Для начала установим возможность закрывать форму календаря по нажатию клавиши «Esc», как альтернативу кнопке в правом верхнем углу окна. Иногда это удобнее. Поместим прямо на календарь кнопку, выбрав ее с панели Toolbox (кнопка называется CommandButton). Кнопка сама по себе будет скрыта от пользователя, но на этапе разработки мы видим ее контуры.
  9. В панели свойств кнопки (она должна быть в данный момент выделена у вас) измените значение строки (Name) "CommandButton1" на значение "cmdClose", а значение строки Cancel "false" на значение "True"
  10. Дважды щелкните по контуру вашей кнопки (или нажмите клавишу «F7»), чтобы перейти в окно кода и между строками кода введите: Unload Me. Итоговый код должен выглядеть так:
    Private Sub cmdClose_Click()
    Unload Me
    End Sub
    Все, теперь форма будет закрываться, если пользователь нажмет клавишу «Esc».
  11. Теперь напишем код для вставки выбранной даты в документ. Для этого в раскрывающемся списке панели свойств выберите строку Calendar1 Calendar (рисунок).
    Календарь будет выделен на форме (появится рамка). Дважды щелкните по ней мышью, чтобы перейти в окно кода к созданной процедуре. Введите между двумя существующими операторами следующий код:
    Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy") & " г. "
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Unload Me


    Итоговый код должен выглядеть так:
    Private Sub Calendar1_Click()
    Selection.Text = Format(Calendar1.Value, "dd mmmm yyyy") & " г. "
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Unload Me 
    End Sub
    Этот код вствляет выбранную дату из календаря в место, где находится курсор ввода в документе, а затем курсор ввода перемещается на 1 символ вправо (для ввода пользователем следующего текста) и форма закрывается.
  12. Чтобы календарь был доступен всегда, когда открывается документ (основанный на этом шаблоне), необходимо добавить в наш проект новый модуль и ввести соответствущий код. Для этого в меню Insert выберите команду Module. Новое (пустое) окно будет открыто в редакторе VB. Введите следующий код:
    Sub OpenCalendar()
    frmCalendar.Show
    End Sub
  13. Обязательно сохраните все изменения в макросе, нажав на кнопку Save на панели инструментов редактора Visual Basic.
  14. Календарь готов и его можно протестировать. Для этого перейдите в окно редактора Word и нажмите сочетание клавиш «Alt»+«F8». Откроется диалоговое окно Макрос. Найдите в списке макросов созданный вами макрос OpenCalendar и нажмите кнопку Выполнить. Откроется наш календарь. Выберите в нем любую дату и щелкните по ней. Дата будет вставлена в документ, а форма календаря закроется.
  15. Осталось сделать лишь одну из трех вещей: разместить кнопку на собственной панели инструментов (см.статью Как создать собственную панель инструментов), либо назначить сочетания клавиш для этого макроса (Настройка сочетаний клавиш), либо добавить команду вызова календаря в контекстное меню, вызываемое щелчком правой кнопки мыши (см.статью Как добавить свою команду в контекстное меню Word).
Если вы работаете с редактором Word 2007, то все действия по созданию календаря будут аналогичными. Разница может быть лишь в размещении кнопки макроса на панель быстрого доступа либо добавления команды в контекстное меню (см.статью Как добавить свои команды в контекстное меню в Word 2007).

Читать окончание заметки на сайте | Написать письмо

Двойная нумерация страниц в документе

Андрей интересуется: Возникла необходимость вести в документе две нумерации страниц - сквозную (внизу страницы) и внутреннюю, по разделам, то есть часть номеров страниц в верхнем и нижнем колонтитуле не совпадает - можно это автоматизировать?

Стандартными способами в редакторе Word 2003 это сделать не удастся. Но на официальном сайте Microsoft есть замечательная статья на русском языке, описывающая два способа реализации схемы двойной нумерации в одном документе. Статья называется Как создать две различные схемы нумерации страниц в одном и том же документе Microsoft Word 2002. Несмотря на название, схема корректно работает и в редакторе Word 2003.

Я написал макрос по первому описанному методу, но у меня возникли сложности с колонтитулами и пришлось просить совета у более опытных товарищей на форуме Microsoft. В итоге получился вполне работающий макрос, который я и представляю вашему вниманию. К сожалению, в редакторе Word 2007 макрос хоть и работает, но сквозная нумерация страниц не поддерживается (в нижнем колонтитуле). Если кто-нибудь сможет доработать этот макрос для Word 2007, я буду благодарен (не один я, наверное).
Sub twinNumberingPages()
'Двойная нумерация страниц в документе, состоящим из разделов:
'  верхний колонтитул - номер страницы в текущем разделе
'  нижний колонтитул - сквозной номер страницы всего документа
'Создан на основе статьи Microsoft http://support.microsoft.com/kb/291283
'Макрос был поправлен Steven Graig Miller 09.06.2008 г.
Dim oRange As Range
Dim hfRange As Range
Dim nSections As Long
Dim nIndex As Long
'
' Шаг 1: Добавляем поля в начало первой страницы первого раздела
'
Set oRange = ActiveDocument.Range(0, 0) 'определяем начало документа
oRange.Select
oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \h \r", PreserveFormatting:=False
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Selection.Move wdCharacter, -1
oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSectionPages, PreserveFormatting:=False
Selection.Move wdCharacter, 1
oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \h \r0", PreserveFormatting:=False
nSections = ActiveDocument.Sections.Count
'
' Шаг 2: Добавляем два поля в начало каждого раздела кроме 1-го раздела
'
If nSections > 1 Then
    For nIndex = 2 To nSections
        Set oRange = ActiveDocument.Sections(nIndex).Range
        oRange.Collapse wdCollapseStart
        oRange.Select
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \h \r", PreserveFormatting:=False
        Selection.Move wdCharacter, -1
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, PreserveFormatting:=False
        Selection.Move wdCharacter, 3
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \c", PreserveFormatting:=False
        Selection.Move wdCharacter, 3
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \h \r", PreserveFormatting:=False
        Selection.Move wdCharacter, -1
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, Text:="+", PreserveFormatting:=False
        Selection.Move wdCharacter, 3
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSectionPages, PreserveFormatting:=False
        Selection.Move wdCharacter, 3
        oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \c", PreserveFormatting:=False
    Next nIndex
End If
'
' Шаг 3: Добавляем верхний и нижний колонтитулы
'
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
Set hfRange = oRange.Sections(1).Headers(wdHeaderFooterPrimary).Range
With hfRange
    .Delete
    .Text = "Страница "
    .MoveEnd unit:=wdCharacter, Count:=1
    .Collapse wdCollapseEnd
    oRange.Fields.Add Range:=hfRange, Type:=wdFieldPage
    .MoveEnd unit:=wdCharacter, Count:=1
    .Collapse wdCollapseEnd
    .Text = " из "
    .MoveEnd unit:=wdCharacter, Count:=1
    .Collapse wdCollapseEnd
    oRange.Fields.Add Range:=hfRange, Type:=wdFieldSectionPages
End With
Set hfRange = oRange.Sections(1).Footers(wdHeaderFooterPrimary).Range
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
hfRange.Collapse wdCollapseStart
hfRange.Select
hfRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, Text:="+", PreserveFormatting:=False
Selection.Move wdCharacter, 3
oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \c", PreserveFormatting:=False
Selection.Move wdCharacter, 3
oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldPage, PreserveFormatting:=False
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
'
' Шаг 4: Устанавливаем формат номеров (нумерация начинается с 1 в каждом разделе)
'
For nIndex = 1 To nSections
    With ActiveDocument.Sections(nIndex).Headers(wdHeaderFooterPrimary)
        .PageNumbers.Numberstyle="wdPageNumberStyleArabic"
        .PageNumbers.HeadingLevelForChapter = 0
        .PageNumbers.IncludeChapterNumber = False
        .PageNumbers.ChapterPageSeparator = wdSeparatorHyphen
        .PageNumbers.RestartNumberingAtSection = True
        .PageNumbers.StartingNumber = 1
    End With
Next nIndex
ActiveDocument.Range(0, 0).Select
ActiveWindow.View.Type = wdPrintView    'переключаемся в режим Разметка страницы
ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit
End Sub
Оставить комментарий | Написать письмо

Требуется помощь

Если вы знаете ответы на вопросы читателей, пожалуйста, присылайте ваши решения через контактную форму на сайте.

Вопрос:
При открытии редактора Word пишет: "Приложению Word не удалось создать рабочий файл. Проверьте переменную среды Temp". Что делать?
Ответить
Вопрос:
Я научился я связывать ячейки таблицы Excel с Word'овским документом. Проблема такая: что делать, если я хочу внедрить (со связью) значения ячейки в объект Microsoft Equation 3.0?
Ответить

Полезные ссылки

Информация об авторских правах

Вся информация, представленная на сайте WordExpert.ru и в этой рассылке, никаким образом не связана с корпорацией Microsoft. В рассылке упоминаются компании и продукты, которые могут быть зарегистрированными торговыми марками и принадлежать различным физическим и юридическим лицам как на территории РФ, так и за ее пределами.

Авторские права на все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке (включая текст, фотографии, подборку, расположение и т.п.) принадлежат Кокину Антону Вадимовичу, если не указано иное. Вы можете свободно использовать и распространять эти материалы с обязательной ссылкой вида "Информация с сайта WordExpert.ru" и с обязательным указанием автора материала.

Все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке, представлены на информационной основе. Вы можете использовать любую информацию с сайта WordExpert.ru или из данной рассылки исключительно на свой страх и риск. Тем не менее, я рекомендую перед применением какой-либо информации с сайта WordExpert.ru или из данной рассылки обязательно сохранять и создавать резервные копии ваших документов.

В этой рассылке также упоминаются различные web-страницы с соответствующими ссылками. Эти ссылки указываются исключительно в информационных целях и никакой рекомендации или одобрения с моей стороны данных веб-страниц не подразумевается, если не указано иное.


В избранное