web-dev-qa-db-fra.com

Comment puis-je désactiver les lignes de grille dans Excel à l'aide de VBA, sans utiliser ActiveWindow

J'ai une macro VBA sur Excel 2013 qui génère un rapport Excel séparé. Dans ce rapport Excel créé, je voudrais désactiver les lignes de grille.

Le seul morceau de code que je rencontre pour que cela se produise est comme ci-dessous

ActiveWindow.DisplayGridlines = False

Cependant, cet Excel est généré en arrière-plan, c'est-à-dire 

Dim appObject As New Excel.Application
appObject.Visible = False

Ce qui signifie que ce rapport n'est pas ActiveWindow. Existe-t-il un autre moyen de désactiver les lignes de la grille sans utiliser l'objet ActiveWindow?

7
tempidope

Si vous avez une référence au classeur, vous pouvez simplement parcourir l'ensemble des fenêtres de sa collection. Si l'application n'est pas visible, vous ne devriez obtenir que 1, mais il est plus prudent d'essayer de coder en dur un index:

Private Sub ToggleGridLines(target As Workbook)
    Dim wnd As Window
    For Each wnd In target.Windows
        wnd.DisplayGridlines = False
    Next
End Sub

Notez que cela modifiera l'affichage de la feuille de calcul active dans le classeur. Pourquoi s'agit-il d'une propriété de la fenêtre alors que la feuille de calcul ne me dépasse pas.

MODIFIER:

Grâce au lien que @Tim a partagé, j'ai réalisé que j'avais complètement espacé de la collection SheetViews. Ceci devrait désactiver les lignes de la grille pour un objet Worksheet arbitraire:

Private Sub TurnOffGridLines(target As Worksheet)
    Dim view As WorksheetView
    For Each view In target.Parent.Windows(1).SheetViews
        If view.Sheet.Name = target.Name Then
            view.DisplayGridlines = False
            Exit Sub
        End If
    Next
End Sub
8
Comintern

ActiveWindow est un membre de la collection d'objets Windows. Comme pour toute collection, référez-vous simplement à la fenêtre réelle par son nom plutôt qu'en spécifiant la fenêtre active. par exemple

Windows("My Workbook.xls").DisplayGridlines = False
2
Tim