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

VBA tips - подсказки и решения на VBA


Как выровнять числа в столбце таблицы по десятичному разделителю?

Десятичные дроби в столбце будут аккуратнее выглядеть, если их выравнивать не по центру или по краю, а по десятичному разделителю. Такой формат выравнивания принят в финансовых и банковских документах для упрощения восприятия, да и смотрится хорошо. В Word это делается с помощью установки позиции табуляции соответствующего вида. Однако, если таблица уже набрана, и в ней не один десяток строк, то устанавливать табуляцию вручную для каждой ячейки довольно трудоёмкая и безынтересная работа. Для облегчения её я составил макрос, который добавляет выравнивание по десятичному разделителю в каждую ячейку с числовым значением столбца, в котором стоит курсор:

1 Sub CellAlignDecimal() 2 Dim oTbl As Table 'Таблица, в которой работаем 3 Dim oCell As Cell 'Ячейка таблицы 4 Dim c As Integer 'Количество столбцов в таблице 5 6 Set oTbl = Selection.Tables(1) 'Работаем в таблице, где находится курсор 7 Set oCell = oTbl.Range.Cells(1) 'Первая ячейка таблицы 8 c = Selection.Cells(1).ColumnIndex 9 10 'Перебор всех ячеек 11 Do 12 'Обрабатываем ячейки только в нужном столбце, содержащем цифры и не в первой строке 13 If oCell.ColumnIndex = c _ 14 And IsNumeric(Left(oCell.Range.Text, Len(oCell.Range.Text) - 2)) _ 15 And oCell.RowIndex <> 1 Then 16 With oCell.Range.ParagraphFormat 17 .Alignment = wdAlignParagraphJustify 'Абзац выравниваем по ширине 18 .FirstLineIndent = 0 'Отступ первой строки убираем 19 .TabStops.ClearAll 'Убираем все отступы табуляции в ячейке 20 'Ставим позицию табуляции по разделителю посередине ячейки 21 .TabStops.Add oCell.Width / 2, wdAlignTabDecimal, wdTabLeaderSpaces 22 End With 23 End If 24 Set oCell = oCell.Next 25 DoEvents 26 Loop Until oCell Is Nothing 27 End Sub

 

Как скрыть номера страниц в оглавлении, оставив заполнитель?

Оказывается и такое бывает: при автоматическом формировании оглавления нужно скрыть номера страниц. Вот что пишет пользователь форума Wordexpert:

Создал оглавление с номерами страниц и заполнителем "...". Необходимо в этом содержании удалить номера страниц, но заполнитель табуляции оставить. Страницы проставляются вручную перед сдачей работы в архив. Делается это в пояснительной записке к диплому по рекомендации преподавателя. Проблема такая, что в окне поиска по строке "^t^#" символ табуляции и следующий за ним номер страницы находится (поиск без подстановочных знаков), но при выполнении этих же действий в окне замены ничего не находится. Соответственно нет возможности автоматически заменить последовательность "^t^#" на "^t".

Разобрав содержание на составляющие части, мы увидим, что оно состоит из двух типов полей: HYPERLINK и PAGEREF. Таким образом, задача сводится к тому, чтобы скрыть или удалить поле PAGEREF. Скрыть можно таким макросом, предварительно выделив оглавление:

1 Sub HidePageNumbersInTOC() 2 Dim ofld As Field 3 For Each ofld In Selection.Fields 4 If ofld.Type = wdFieldPageRef Then 5 ofld.Result.Font.Hidden = True 6 End If 7 Next 8 End Sub

В ходе использования этого макроса выяснилось, что он перестаёт срабатывать через некоторое время, поэтому было принято решение не скрывать поле, а удалять его:
1 Sub HidePageNumbersInTOC() 2 Dim ofld As Field 3 For Each ofld In Selection.Fields 4 If ofld.Type = wdFieldPageRef Then 5 ofld.Delete 6 End If 7 Next 8 End Sub

В избранное