史蒂文(Steven)有一个工作表,其中包含许多行和列的数据。他通过激活单元格B2冻结了第一行和第一列,然后冻结了窗格。这按他想要的方式工作。他甚至可以保存和关闭工作簿,并且当他重新打开工作簿时,窗格仍然冻结。

但是,如果Steven为工作簿打开一个新窗口(“视图” |“窗口” |“新窗口”),则新窗口没有冻结的窗格。由于他已经冻结了该工作簿中许多工作表上的窗格,因此他必须非常小心自己首先关闭哪个窗口。如果他先关闭原始窗口,则在保存工作簿时将保存所有未冻结的工作表。

史蒂文·纳斯特(Steven)想知道是否有办法让新窗口保留冻结的窗格设置?

Excel中没有设置可以处理Steven需要发生的事情。之所以不保存冻结的窗格,是因为FreezePanes(以及Zoom,Split和其他一些设置)是窗口的属性,而不是工作表或工作簿的属性。创建新窗口时,属性不会从原始窗口继承。

但是,您可以解决此问题(并解决Steven的问题)

通过使用宏为您进行设置。一种非常简短的方法是放弃使用功能区工具来创建新窗口。而是将此宏添加到QAT并使用它来创建窗口:

Sub CreateNewWindow1()

Dim rPane As Range

Set rPane = ActiveWindow.VisibleRange(1)

ActiveWindow.NewWindow     ActiveSheet.Range("B2").Select     ActiveWindow.FreezePanes = True End Sub

宏将创建一个新窗口,将可见单元格设置为与原始窗口中显示的单元格相等,在新窗口中选择单元格B2,然后冻结窗格。

但是,如果您的“窗格冻结”需求更加多样化,则这种简单的方法可能行不通。例如,您可能想要一种创建新窗口并使它与创建新窗口时处于活动状态的窗口中的任何窗格相匹配的方法。

以下宏检查当前窗口是否具有泡沫窗格。如果是这样,那么它将找出冻结的位置,并使用它在新窗口中设置冻结的窗格。如果没有冻结的窗格,则无论如何都会创建一个新窗口,并且没有冻结的窗口。无论哪种情况,在新窗口中选择的单元格都与在原始窗口中选择的单元格相同。

Sub CreateNewWindow2()

Dim iRow As Integer     Dim iCol As Integer     Dim rOldPos As Range

iRow = 0     iCol = 0     If ActiveWindow.FreezePanes Then         iRow = ActiveWindow.ScrollRow         iCol = ActiveWindow.ScrollColumn     End If     Set rOldPos = ActiveCell     ActiveWindow.NewWindow     If (iRow > 0) And (iCol > 0) Then         Cells(iRow, iCol).Select         ActiveWindow.FreezePanes = True     End If     rOldPos.Select End Sub

同样,此代码可用于创建所需的任何新窗口。

他们完成了Steven所需的工作,因为他们将冻结的窗格设置从活动窗口复制到了新创建的窗口。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本提示(13366)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。