Как добавить внутренние границы в таблицу Word после ошибки? - PullRequest
0 голосов
/ 15 ноября 2011

Для таблицы документов Word 97-02 я изменил следующий макрос из http://www.thedoctools.com/downloads/basTableBorder.shtml для своих целей, чтобы он теперь выглядел так:

Sub ApplyUniformBordersToAllTables()
    Dim oTable As Table
    Dim oBorderStyle As WdLineStyle
    Dim oBorderWidth As WdLineWidth
    Dim oBorderColor As WdColor
    Dim oarray As Variant
    Dim n As Long
    Dim i As Long
    '=========================
    'Change the values below to the desired style, width and color
    oBorderStyle = wdLineStyleSingle
    oBorderWidth = wdLineWidth050pt
    oBorderColor = wdColorAutomatic
    '=========================
    'Define array with the borders to be changed
    oarray = Array(wdBorderTop, _
        wdBorderLeft, _
        wdBorderBottom, _
        wdBorderRight, _
        wdBorderHorizontal, _
        wdBorderVertical)
    For Each oTable In ActiveDocument.Tables
        'Count tables - used in message
        n = n + 1
        With oTable
            For i = LBound(oarray) To UBound(oarray)
                'Skip if only one row and wdBorderHorizontal
                If .Rows.Count = 1 And oarray(i) = wdBorderHorizontal Then GoTo Skip
                'Skip if only one column and wdBorderVertical
                If .Columns.Count = 1 And oarray(i) = wdBorderVertical Then GoTo Skip
                With .Borders(oarray(i))
                    .LineStyle = oBorderStyle
                    .LineWidth = oBorderWidth
                    .Color = oBorderColor
                End With
            Next i
        End With
Skip:
    Next oTable
End Sub

Макрос был измененоднако для предотвращения ошибок, когда он встречает таблицы только с одной строкой или одним столбцом, он все равно не добавляет внутренние границы после возникновения проблемы.

Может кто-нибудь предложить какие-либо предложения?

1 Ответ

2 голосов
/ 15 ноября 2011

Я не уверен, где происходит ваша ошибка, но мне любопытно, почему так много проверок, чтобы удостовериться, что таблица с одной ячейкой пропущена, так как она выдаст ошибку.Есть хороший способ избежать ошибок: поместите " On Error Resume Next " в свой код.Это классический пример того, где вы можете сделать это.Когда он пытается сделать что-то, чего не может из-за размера, он продолжает работать, гарантируя, что все таблицы, даже отдельные ячейки, отформатированы по вашему вкусу.

Некоторые моменты, которые я нахожу ненужными:

  • Нет необходимости отслеживать количество таблиц с помощью «n», поскольку вы можете просто использовать свойство tables.count
  • Нет необходимости проверять границы, если массив объявлен внутри cound (вызнать границы!)
  • Нет причин объявлять типы констант границы в качестве переменных.

Вот более чистая версия кода для вашей справки (плюс я внес некоторые измененияоснованный на личных предпочтениях, в частности на именовании переменных; я чувствую, что нет нужды в венгерской нотации с VBA, особенно учитывая, что код должен быть достаточно коротким, чтобы вы могли найти и увидеть объявления переменных, если это необходимо).

...