-1
votes

Comment cacher les cellules de la table qui ont une couleur de fond comme un gris du document MS Word à l'aide de macros VBA

J'ai tellement de types de tables dans mon mot doc. À partir de ces cellules de couleur grises ne sont pas utilisables, je dois donc le cacher (ne voulez pas la supprimer). Les tableaux Nombre de lignes et de colonnes ne sont toujours pas identiques. Donc, je ne sais pas comment cacher les cellules de la table qui ont une couleur de fond comme gris du document MS Word utilisant VBA Macros ???? xxx


1 commentaires

Si vous avez fusionné verticalement des cellules, vous ne pouvez masquer que Tableaux complets car vous ne pouvez pas adresser chaque ligne individuellement. S'il vous plaît considérer pour tester mon premier exemple. En outre, il n'est pas possible d'avoir toutes les cellules blanches visibles sans aucun gris visible, car mot ne peut pas cacher partiellement des rangées sans suppression.


3 Réponses :


0
votes

Reconnaître toutes sortes de "gris", vous pouvez comparer des parties rouge / vert / bleu de la couleur d'arrière-plan. S'ils sont identiques, la couleur est noire (toutes zéro), blanche (tous les 255) ou gris.

Si gris, vous pouvez cacher toute la table en cachant sa police. P>

Premier Exemple (cacher la table entière en fonction de l'arrière-plan de la première cellule): p> xxx pré>

second exemple: cacher chaque rangée sur la base de la première cellule de la ligne: P>

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


0 commentaires

0
votes

Le moyen le plus simple, en supposant que vous ayez utilisé l'une des nuances de gris standard, est d'utiliser le code comme: xxx

Le code ci-dessus suppose que l'ombrage est de 25% gris. Autre possibilité est 50% gris, ou WDGRAY50. Toute autre ombrage à l'échelle grise nécessite un code plus complet, tel que Asger Publié. En définissant .font.Hedid = true, vous pouvez basculer la visibilité des lignes cachées sur le bouton / désactivé via le bouton ¶ sur l'onglet Home du ruban.

Note: Le code ci-dessus suppose qu'il n'y a pas de cellules verticalement fusionnées / divisées dans les tables; S'il y en a, vous devrez fournir plus de détails sur les structures de table.


2 commentaires

HII, ma table a une fusion verticalement des cellules. Comment coder pour cela?


@neharaut Comme je l'ai noté dans ma réponse, vous devrez fournir plus de détails sur les structures de table. Par exemple, sont des colonnes entières (ou toutes sauf une ligne d'en-tête) fusionnée. Quelles colonnes sont affectées? Modifiez votre message d'origine pour fournir les détails.



1
votes

À propos du meilleur que vous obtiendrez avec des tables telles que votre spectacle de captures d'écran est quelque chose dans le sens de la macro suivante.

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


1 commentaires

@neharaut Dans ce cas, vous devez marquer les bonnes réponses pour les tables avec et sans cellules fusionnées pour répondre à la question.