我在Excel 2013上有一个VBA宏,它生成一个单独的Excel报告。在这个创建的excel报告中,我想关闭GridLines。
我遇到的唯一一段代码就是如下所示
ActiveWindow.DisplayGridlines = False
但是,这个excel是在后台生成的,即
Dim appObject As New Excel.Application
appObject.Visible = False
这意味着此报告不是ActiveWindow。是否有另一种方法可以在不使用ActiveWindow对象的情况下关闭网格线?
答案 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
任何反馈都非常欢迎