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

时间:2016-11-01 20:46:14

标签: excel vba excel-vba

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

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

ActiveWindow.DisplayGridlines = False

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

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

这意味着此报告不是ActiveWindow。是否有另一种方法可以在不使用ActiveWindow对象的情况下关闭网格线?

3 个答案:

答案 0 :(得分: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

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

修改

感谢@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

答案 1 :(得分:2)

ActiveWindow是Windows对象集合的成员。与任何集合一样,只需按名称引用实际窗口,而不是通过指定活动窗口。例如

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

答案 2 :(得分:0)

我们可以按照“共产国际”的建议进行操作,也可以激活所需的工作表以在循环中执行足够的代码行。 我以几种方式尝试了上面发布的代码,并发布了最适合我的代码段:

Sub GridLines(Optional target As Worksheet, Optional display As Boolean = True)

    Dim oWnd As Window
    Dim oShView As WorksheetView
    If IsMissing(target) Or target Is Nothing Then
        For Each oShView In ActiveSheet.Parent.Windows(1).SheetViews
            oShView.DisplayGridlines = display
        Next
    Else
        For Each oShView In target.Parent.Windows(1).SheetViews
            If oShView.Sheet.Name = target.Name Then
                oShView.DisplayGridlines = display
                Exit For
            End If
        Next
    End If
    Set oShView = Nothing
    Set oWnd = Nothing
End Sub

任何反馈都非常欢迎