как скрыть ячейки таблицы, имеющие серый цвет фона, из документа MS Word с помощью макросов VBA - PullRequest
0 голосов
/ 20 января 2019

У меня так много разных типов таблиц в моем слове doc.От этого серого цвета ячейки не могут быть использованы, поэтому я должен скрыть его (не хочу его удалять).В таблицах количество строк и столбцов всегда не одинаково.так что я не знаю, как скрыть ячейки таблицы, которые имеют серый цвет фона в документе MS Word, используя макросы VBA ????

Sub ClearTableBGColor()
    Dim t As Table

    For Each t In ActiveDocument.Tables
    If t.Shading.BackgroundPatternColor = Grey Then
     t.Shading.BackgroundPatternColor.Hidden = True
        End If
    Next
End Sub

Ответы [ 3 ]

0 голосов
/ 21 января 2019

Самый простой способ, при условии, что вы использовали один из стандартных оттенков серого, это использовать код вроде:

Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
With ActiveDocument
  For Each Tbl In .Tables
    With Tbl
      For r = 1 To .Rows.Count
        With .Rows(r).Range
          If .Shading.BackgroundPatternColorIndex = wdGray25 Then .Font.Hidden = True
        End With
      Next
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

Приведенный выше код предполагает, что затенение серого цвета составляет 25%. Другая возможность - 50% серого или wdGray50. Любые другие оттенки серого требуют более обширного кода, такого как опубликованный Asger. Установив .Font.Hidden = True, вы можете включать и выключать видимость скрытых строк с помощью кнопки on на вкладке «Главная» ленты.

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

0 голосов
/ 21 января 2019

Лучшее, что вы получите с таблицами, как показано на скриншотах, - это то, что делает следующий макрос.

Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, c As Long
With ActiveDocument
  For Each Tbl In .Tables
    With Tbl.Range
      For c = 1 To .Cells.Count
        With .Cells(c).Range
          If .Shading.BackgroundPatternColorIndex = wdGray25 Then
            With .ParagraphFormat
              .SpaceBefore = 0
              .SpaceAfter = 0
              .LineSpacingRule = wdLineSpaceExactly
              .LineSpacing = 0.7
            End With
            .Font.Hidden = True
          End If
        End With
      Next
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

Обратите внимание, что вы не можете полностью скрыть строку таким образом.

0 голосов
/ 20 января 2019

Чтобы распознать все виды «серого», вы можете сравнить красные / зеленые / синие части цвета фона. Если они идентичны, то это черный (все ноль), белый (все 255) или серый.

Если серый, то вы можете скрыть всю таблицу, скрыв ее шрифт.

Первый пример (скрытие всей таблицы на основе фона первой ячейки):

Sub ClearTableBGColor()
    Dim t As Table
    Dim SearchColor As Long
    Dim r As Byte, g As Byte, b As Byte

    For Each t In ActiveDocument.Tables
        SearchColor = t.Range.Cells(1).Shading.BackgroundPatternColor
        If SearchColor < 0 Then SearchColor = &H1000000 + SearchColor
        r = SearchColor Mod 256             ' red part
        g = SearchColor \ 256 Mod 256       ' green part
        b = SearchColor \ (2 ^ 16) Mod 256  ' blue part
        If (r = g) And (g = b) Then         ' all parts identical?
            If r > 0 And r < 255 Then       ' neither black nor white?
                t.Range.Font.Hidden = True  ' hide table with grey background
            End If
        End If
    Next t
End Sub

Второй пример: скрытие каждой строки индивидуально на основе первой ячейки строки:

Sub ClearTableRowsBGColor()
    Dim t As Table
    Dim tableRow As Row
    Dim SearchColor As Long
    Dim r As Byte, g As Byte, b As Byte

    For Each t In ActiveDocument.Tables
        For Each tableRow In t.Rows
            SearchColor = tableRow.Range.Cells(1).Shading.BackgroundPatternColor
            If SearchColor < 0 Then SearchColor = &H1000000 + SearchColor
            r = SearchColor Mod 256             ' red part
            g = SearchColor \ 256 Mod 256       ' green part
            b = SearchColor \ (2 ^ 16) Mod 256  ' blue part
            If (r = g) And (g = b) Then         ' all parts identical?
                If r > 0 And r < 255 Then       ' neither black nor white?
                    tableRow.Range.Font.Hidden = True  ' hide grey
                End If
            End If
        Next tableRow
    Next t
End Sub
...