如何在Excel中使用VBA而不使用ActiveWindow关闭网格线

0sgqnhkj  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(219)

我在Excel 2013上有一个VBA宏,它可以生成一个单独的Excel报告。在创建的此excel报表中,我想关闭网格线。
我遇到的实现这一点的唯一代码如下所示

ActiveWindow.DisplayGridlines = False

但是,此Excel是在后台生成的,即,

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

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

d5vmydt9

d5vmydt91#

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

iyr7buue2#

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

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

luaexgnf3#

我们可以按照“共产国际”的建议去做,或者激活想要的表单,在一个循环中执行足够的代码行。我尝试了几种方法上面发布的代码,我发布了最适合我的代码片段:

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

任何反馈都非常欢迎

yhqotfr8

yhqotfr84#

为什么要使用一行代码,而你可以使用20行?

Windows(ActiveWorkbook.Name).DisplayGridlines = False

相关问题