2013-02-19 9 views
1

Я использую следующий макрос для итерации через Word Documents и удаления цвета из всех таблиц в них, за исключением первой таблицы.Word Macro для удаления цвета только из определенных ячеек таблицы

У нас есть документы, которые абсолютно не будут работать с полями формы из-за проблем защиты формы с приложением, которое автоматически заполняет эти документы полями слияния. Итак, следующая лучшая вещь - просто отметить, что еще нужно заполнить затенением, а затем удалить затенение перед печатью документа. Когда этот код выполняет итерацию через документ, он удаляет некоторые границы для определенных таблиц.

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

Я пробовал несколько вариантов вложенного цикла, но не мог заставить его работать таким образом.

Sub decolordocument() 
    Dim tbl As Table 
    Dim first As Boolean 

    first = True 

    For Each tbl In ActiveDocument.Tables 
     If first Then 
      first = False 
     Else 
      tbl.Shading.BackgroundPatternColor = wdColorWhite 
     End If 
    Next 

    MsgBox "Shaded cells in tables have been updated." 
End Sub 

Я также попробовал этот код и получил тот же эффект границ удаляется:

Sub decolordocument() 

    Dim tbl As Table 
    Dim tblCount As Long 
    Dim i As Long 
    Dim first As Boolean 

    tblCount = ActiveDocument.Tables.Count 

    For i = 2 To tblCount 
     With ActiveDocument.Tables(i).Shading 
      .BackgroundPatternColor = wdColorWhite 
     End With 
    Next 
    MsgBox "Shaded cells in tables have been updated." 

End Sub 

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

+0

Я думаю, что вы забудете «Закончить, если» перед «Следующим». пожалуйста, исправьте свой код – Saju

+0

Нет, есть инструкция End If. –

+0

ваша ошибка была исправлена ​​@Siddharth Rout, пожалуйста, нажмите на ссылку после '' edit', чтобы увидеть изменения :) – Saju

ответ

0

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

Sub decolordocument() 

Dim tbl As Table 
Dim tblCount As Long 
Dim cll As Word.Cell 
Dim i As Long 

tblCount = ActiveDocument.Tables.Count 

For i = 2 To tblCount 
    For Each cll In ActiveDocument.Tables(i).Range.Cells 
     If cll.Shading.BackgroundPatternColor = RGB(217, 217, 217) Then 
      cll.Shading.BackgroundPatternColor = wdColorWhite 
     End If 
    Next 
Next 
MsgBox "Color in shaded cells has been removed." 

End Sub 
1

Чтобы удалить фон, вы должны использовать .Shading.

Я буду демонстрировать его для одного документа. Пожалуйста, приспособите его согласно вашему коду.

Допустим, ваш документ выглядит следующим образом

enter image description here

Попробуйте этот код

Option Explicit 

Sub Sample() 
    Dim tblCount As Long 
    Dim i As Long 

    '~~> Get the Tables Count 
    tblCount = ActiveDocument.Tables.Count 

    '~~> If number of tables is less than 2 then exit sub 
    If tblCount < 2 Then Exit Sub 

    '~~> Start with 2nd table and loop 
    For i = 2 To tblCount 
     '~~> Remove background 
     With ActiveDocument.Tables(i).Shading 
      .Texture = wdTextureNone 
      .ForegroundPatternColor = wdColorAutomatic 
      .BackgroundPatternColor = wdColorAutomatic 
     End With 
    Next 
End Sub 

Это как документ выглядит после того, как код работает

enter image description here

+0

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

+0

Можете ли вы поделиться своим кодом, который используете ?.Также проверяйте физически, если у тех, кто столкнулся с таблицами, была граница перед рукой. Вы можете сделать это, вручную удалив фон;) –

+0

Можно ли загрузить загруженный документ по адресу www.wikisend.com и поделитесь ссылкой здесь? –

Смежные вопросы