1

Тема: Автоформат таблиц в границах печати

Мне понравился сайт, форум, и сама идея обмениваться "тайными знаниями" из соображений... ну, не знаю... у каждого свои. А мои такие -- "information WANTS to be free".

Поэтому предлагаю piece of code, полностью годный для боевого применения smile

В процессе работы с таблицами, полученными разными способами (копипаст из XL, с разными настройками по границам таблиц и пр.) хотелось решить вопрос хотя-бы в первом приближении -- а именно -- чтобы все помещалось в область печати и все было "ровно".

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

Что НЕ УМЕЕТ: выравнивать границы столбцов, если в какой-то строке границы другие. Это будет следующая итерация, думаю на эту тему.

ПО КОДУ. Нет никакого анализа содержимого таблиц и их форматирования. Все делается функциями Word.
Задаются жесткие границы текста от границ ячеек, обратите внимание. Если надо -- поменяйте. Задается автоматическая высота от метрик текста. Опять же если надо -- поменяйте.

И вообще -- полная свобода модификации. Никакого копирайта smile

Sub TableAdjust()
' Как использовать: фокус ввода -- в любом месте таблицы, применить.
' 
    If Selection.Information(wdWithInTable) Then
    Selection.Tables(1).Select
    Selection.Rows.HeightRule = wdRowHeightAuto
    Selection.Rows.Height = CentimetersToPoints(0)
    Selection.Tables(1).Rows.LeftIndent = CentimetersToPoints(0)
    Selection.Tables(1).Rows.Alignment = wdAlignRowLeft
    With Selection.Tables(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.05)
        .RightPadding = CentimetersToPoints(0.05)
        .Spacing = 0
        .AllowPageBreaks = True
        .AllowAutoFit = True
    End With
    Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
    Selection.Tables(1).PreferredWidthType = wdPreferredWidthPercent
    Selection.Tables(1).PreferredWidth = 100
    Selection.Columns.PreferredWidthType = wdPreferredWidthPoints
    With Selection.Tables(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.05)
        .RightPadding = CentimetersToPoints(0.05)
        .Spacing = 0
        .AllowPageBreaks = True
        .AllowAutoFit = False
    End With
    Selection.Tables(1).Rows.LeftIndent = CentimetersToPoints(0)
    Selection.Tables(1).Rows.Alignment = wdAlignRowLeft
    End If
End Sub