繁体   English   中英

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

[英]How can I turn off gridlines in excel using VBA, without using ActiveWindow

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

我遇到的唯一一段代码如下

ActiveWindow.DisplayGridlines = False

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

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

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

如果您有对工作簿的引用,则只需遍历其集合中的所有 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

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

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

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

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

非常欢迎任何反馈

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM