web-dev-qa-db-de.com

Wie kann ich Gitternetzlinien in Excel mithilfe von VBA deaktivieren, ohne ActiveWindow zu verwenden

Ich habe ein VBA-Makro über Excel 2013, das einen separaten Excel-Bericht generiert. In diesem erstellten Excel-Bericht möchte ich die GridLines deaktivieren.

Der einzige Code, den ich dazu bekomme, ist, wie unten beschrieben

ActiveWindow.DisplayGridlines = False

Dieses Excel wird jedoch im Hintergrund generiert, d. H. 

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

Dies bedeutet, dass dieser Bericht nicht das ActiveWindow ist. Gibt es eine alternative Möglichkeit, die Gitternetzlinien zu deaktivieren, ohne das ActiveWindow-Objekt zu verwenden?

7
tempidope

Wenn Sie einen Verweis auf die Arbeitsmappe haben, können Sie einfach alle Fenster in ihrer Sammlung durchlaufen. Wenn die Anwendung nicht sichtbar ist, sollten Sie nur 1 erhalten, aber es ist sicherer, als einen Index hart zu codieren:

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

Beachten Sie, dass hierdurch die Anzeige auf dem aktiven Arbeitsblatt in der Arbeitsmappe geändert wird - warum dies eine Eigenschaft des Fensters und nicht das Arbeitsblatt ist, liegt mir nicht.

BEARBEITEN:

Dank des Links, den @Tim freigab, wurde mir klar, dass ich die SheetViews-Sammlung vollständig getrennt hatte. Dies sollte die Rasterlinien für ein beliebiges Worksheet-Objekt deaktivieren:

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 ist ein Mitglied der Windows-Objektauflistung. Beziehen Sie sich wie bei jeder Sammlung einfach auf das tatsächliche Fenster anhand des Namens und nicht auf das aktive Fenster. z.B

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