#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, и вы точно знаете, что затенение строк соответствует указанному вами текстурированному темному диагонали вниз.