Как отключить линии сетки в excel с помощью VBA, не используя ActiveWindow

У меня есть макрос VBA над Excel 2013, который генерирует отдельный отчет excel. В этом отчете Excel, который был создан, я хотел бы отключить GridLines.

Единственный фрагмент кода, с которым я сталкиваюсь, чтобы сделать это, как ниже

ActiveWindow.DisplayGridlines = False

Однако это excel генерируется в фоновом режиме, то есть

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

Это означает, что этот отчет не является ActiveWindow. Есть ли альтернативный способ отключения линий сетки без использования объекта ActiveWindow?

Ответ 1

Если у вас есть ссылка на книгу, вы можете просто перебирать все Windows в своей коллекции. Если приложение не видно, вы должны получить только 1, но это безопаснее, чем пытаться жестко закодировать индекс:

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

Обратите внимание, что это изменит отображение на рабочем листе в рабочей книге - почему это свойство окна, а не рабочий лист вне меня.

EDIT:

Благодаря ссылке, которую добавил @Tim, я понял, что полностью отстал от коллекции SheetViews. Это должно отключить линии сетки для произвольного объекта Worksheet:

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

Ответ 2

ActiveWindow является частью коллекции объектов Windows. Как и в любой коллекции, просто обращайтесь к фактическому окну по имени, а не указав активное окно. например,

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