VBA - 冻结不同文件上的窗格

问题描述 投票:0回答:3

我正在使用 Excel 2010 进行一些自动化操作。

总之,我用这个方法创建了一个新的工作簿:

With CreateObject("Excel.Application")
    Set NewBook = .Workbooks.Add
    .Visible = True
End With

With NewBook
    Set WS = NewBook.Sheets("Sheet1")
End With

现在我想创建一个冻结窗格。

我已经尝试使用selectActiveWindow此页面

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 错误。非常感谢任何人都可以帮忙。

vba excel excel-2010
3个回答
0
投票

就在这样的时候,我尝试通过选择性地使用 msgbox 语句来调试代码。尝试在运行 newbook.activate 或 with 循环之前放置 msgbox 语句,并输出当前工作簿或工作表的名称。这应该告诉您 Excel 将哪个工作簿视为当前活动的。

还有... https://msdn.microsoft.com/en-us/library/office/ff835568.aspxhttps://msdn.microsoft.com/en-us/library/office/ff195422.aspx

也许 Excel 无法识别您创建的新工作簿的名称。看起来每个工作簿都有自己的索引,但是按照创建的顺序排列。也许尝试通过索引引用工作簿。


0
投票

不使用 ActiveWindow 来限定新工作簿的第一个(实际上是唯一的)窗口。如果工作簿有多个工作表,则有一个先决条件;您需要激活工作簿中所需的工作表,才能将 FreezePanes 应用到工作簿中的正确工作表。

NewBook.Sheets("DesiredSheet").Activate
With NewBook.Windows(1)
    If .FreezePanes Then .FreezePanes = False
   .SplitColumn = 0
   .SplitRow = 1
   .FreezePanes = True
End With

0
投票

在使用本身是从主工作簿创建的工作簿时,我遇到了同样的问题。就我而言,解决方案是在尝试冻结窗格之前添加“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
© www.soinside.com 2019 - 2024. All rights reserved.