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