如何在不使用ActiveWindow的情况下使用VBA关闭excel中的网格线

tem*_*ope 9 excel vba excel-vba

我在Excel 2013上有一个VBA宏,它生成一个单独的Excel报告.在这个创建的excel报告中,我想关闭GridLines.

我遇到的唯一一段代码就是如下所示

ActiveWindow.DisplayGridlines = False
Run Code Online (Sandbox Code Playgroud)

但是,这个excel是在后台生成的,即

Dim appObject As New Excel.Application
appObject.Visible = False
Run Code Online (Sandbox Code Playgroud)

这意味着此报告不是ActiveWindow.有没有使用ActiveWindow对象关闭网格线的替代方法?

Com*_*ern 10

如果您有对工作簿的引用,则可以遍历其集合中的所有Windows.如果应用程序不可见,您应该只获得1,但它比尝试对索引进行硬编码更安全:

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

请注意,这将设置更改工作簿中活动工作表上的显示 - 为什么这是窗口的属性而不是工作表超出我的范围.

编辑:

感谢@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
Run Code Online (Sandbox Code Playgroud)