Удаление затененных строк перед сохранением

#vba #ms-word

#vba #ms-word

Вопрос:

У меня есть документ Word 2013 с кодом для затенения указанных строк на основе выпадающих списков в документе.

Я настроил его на удаление всех заштрихованных строк из документа перед печатью, но я хочу, чтобы дополнительный подраздел удалял все заштрихованные строки перед использованием функции «Сохранить как».

Выведите работающий код:

 Public Sub myApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)

    Dim d1 As Document
    Set d1 = ActiveDocument
    
    Dim tbl As Table, r As Row, c As Cell, rng As Range, t As Integer
    Dim i As Integer, n As Integer
    
    'table counter
    t = 1
    
    'cycle through each table
    For Each tbl In d1.Tables
        'row counter
        n = tbl.Rows.Count
        'cycle through the rows in the selected table
        For i = 1 To n Step 1
            'compare pattern fill, select those that are shaded and delete
            If d1.Tables(t).Rows(i).Shading.Texture = wdTextureDarkDiagonalDown Then
                d1.Tables(t).Rows(i).Delete
            End If
        Next
        t = t   1
    Next
 

Сохраните код, который не работает:

 Public Sub myApp_DocumentBeforeSaveAs(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    
    Dim d1 As Document
    Set d1 = ActiveDocument
    
    Dim tbl As Table, r As Row, c As Cell, rng As Range, t As Integer
    Dim i As Integer, n As Integer
    
    'table counter
    t = 1
    
    'cycle through each table
    For Each tbl In d1.Tables
        'row counter
        n = tbl.Rows.Count
        'cycle through the rows in the selected table
        For i = 1 To n Step 1
            'compare pattern fill, select those that are shaded and delete
            If d1.Tables(t).Rows(i).Shading.Texture = wdTextureDarkDiagonalDown Then
                d1.Tables(t).Rows(i).Delete
            End If
        Next
        t = t   1
    Next
 

Я не получаю никаких кодов ошибок, он просто ничего не делает с затененным текстом.

Комментарии:

1. Во-первых, чтобы облегчить себе задачу, я бы выделил код для удаления затененных строк в отдельный Sub . Затем вы можете вызвать вспомогательный модуль из любого места (в данном случае оба myApp_DocumentBeforePrint и myApp_DocumentBeforeSaveAs ). Вы убедились, что ваш код выполняется в myApp_DocumentBeforeSaveAs подпрограмме? Попробуйте некоторые Debug.Print инструкции и / или точки останова и посмотрите, сможете ли вы определить строки, которые не работают.

Ответ №1:

Ваш код работает вроде как, но он генерирует ошибку. Проблема в

 For i = 1 To n Step 1
 

строка кода. Чтобы удалить строки в таблице, вам нужно сделать шаг назад, иначе при удалении строки количество оставшихся строк не будет равно количеству строк в таблице. Ваша команда должна быть:

 For i = n to 1 Step -1 
 

Также есть ненужная строка кода

 t = t   1
 

Это не создает проблемы, но в этом нет необходимости, по крайней мере, исходя из того, что вы нам показали.

Опять же, ваш код работает до тех пор, пока вы исправляете эту проблему с шагом 1, и вы точно знаете, что затенение строк соответствует указанному вами текстурированному темному диагонали вниз.