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?
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
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