我正在使用 Excel 2010 进行一些自动化操作。
总之,我用这个方法创建了一个新的工作簿:
With CreateObject("Excel.Application")
Set NewBook = .Workbooks.Add
.Visible = True
End With
With NewBook
Set WS = NewBook.Sheets("Sheet1")
End With
现在我想创建一个冻结窗格。
我已经尝试使用select和ActiveWindow如此页面:
WS.Range("F4").Select
ActiveWindow.FreezePanes = True
不知何故,在编辑不同文件时,.select 方法总是选择原始文件而不是添加的书籍。
然后我查看了此页面并尝试:
NewBook.activate
With ActiveWindow
If .FreezePanes Then .FreezePanes = False
.SplitColumn = 5
.SplitRow = 4
.FreezePanes = True
End With
没用,冻结窗格是在原始文件上创建的。
以下也不起作用:
With NewBook
If .FreezePanes Then .FreezePanes = False
.SplitColumn = 5
.SplitRow = 4
.FreezePanes = True
End With
不确定我的 .activate 方法是否错误,或者 ActiveWindow 错误,或者 .select 错误。非常感谢任何人都可以帮忙。
就在这样的时候,我尝试通过选择性地使用 msgbox 语句来调试代码。尝试在运行 newbook.activate 或 with 循环之前放置 msgbox 语句,并输出当前工作簿或工作表的名称。这应该告诉您 Excel 将哪个工作簿视为当前活动的。
还有... https://msdn.microsoft.com/en-us/library/office/ff835568.aspx 和 https://msdn.microsoft.com/en-us/library/office/ff195422.aspx
也许 Excel 无法识别您创建的新工作簿的名称。看起来每个工作簿都有自己的索引,但是按照创建的顺序排列。也许尝试通过索引引用工作簿。
不使用 ActiveWindow 来限定新工作簿的第一个(实际上是唯一的)窗口。如果工作簿有多个工作表,则有一个先决条件;您需要激活工作簿中所需的工作表,才能将 FreezePanes 应用到工作簿中的正确工作表。
NewBook.Sheets("DesiredSheet").Activate
With NewBook.Windows(1)
If .FreezePanes Then .FreezePanes = False
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
End With
在使用本身是从主工作簿创建的工作簿时,我遇到了同样的问题。就我而言,解决方案是在尝试冻结窗格之前添加“ActiveWindow.WindowState = xlMaximized”:
NewBook.Activate
NewBook.Sheets("DesiredSheet").Select
ActiveWindow.WindowState = xlMaximized
With NewBook.Windows(1)
If .FreezePanes Then .FreezePanes = False
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
End With