Excel冻结窗口与拆分窗口及取消的15个实例,含用VBA动态与批量冻结所有工作表Sheet

亮术网 2019-11-25 本网原创

在 Excel 中,冻结窗口既可以冻结首行首列又可以冻结任意前几行前几列,还可以同时冻结首行和首列、任意前几行和前几列。拆分窗口既可把一个表格拆分两个窗口,又可把它拆分为四个窗口,它与冻结窗口有异曲同工的作用。

如果要动态冻结窗口和批量冻结窗口,需要用VBA(宏)实现。例如:用 VBA 可以实现从一个工作表、多个工作表或一个工作簿所有工作表任意指定单元格或选中单元格处冻结,还可以实现只冻结选择的全部工作表。

 

一、Excel冻结窗口

(一)冻结首行

选择“视图”选项卡,单击“冻结窗口”,在弹出的菜单中选择“冻结首行”,第一行下边线上出现一条灰线,则首行被冻结,往下拖滑块往上移数据时,首行始终停在第一行不动;操作过程步骤,如图1所示:

Excel冻结窗口

图1

 

(二)冻结首列

当前选项卡为“视图”,单击“冻结窗口”,在弹出的选项中选择“冻结首列”,第一列右边线上出现一条灰线,则首列被冻结,往右拖滑块,列往左移动时,首列始终停在第一列不动;操作过程步骤,如图2所示:

Excel冻结首列

图2

 

(三)同时冻结首行与首列

当前为“视图”选项卡,选中 B2 单元格,单击“冻结窗口”,在弹出的菜单中,选择“冻结拆分窗口”,则 A 列右边线和第一行下边线都出现一条灰线,则首行和首列同时被冻结;当往上移动数据时,首行不动;当往左移动数据时,首列不动;操作过程步骤,如图3所示:

Excel同时冻结首行与首列

图3

 

(四)冻结前几行(前 n 行)

假如要冻结前 4 行和前两列。选中 A5 单元格,单击“视图”选项卡下的“冻结窗口”,然后选择“冻结拆分窗口”,则第四行下边线出现一条灰线,前四行都被冻结;当往上移动数据时,前四行始终不动;操作过程步骤,如图4所示:

Excel冻结前几行(前 n 行

图4

 

(五)冻结前几列(前 n 列)

假如要冻结前 2 列。选中 C1 单元格,选择“视图”选项卡,点击“冻结窗口”,然后选择“冻结拆分窗口”,则第二列右边线出现一条灰线,前两列被冻结;当往左移动数据时,前两列始终不动;操作过程步骤,如图5所示:

Excel冻结前几列(前 n 列)

图5

 

(六)同时冻结前几行(前 n 行)和前几列(前 n 列)

假如要冻结前 5 行和前两列。选中 C6 单元格,单击“视图”选项卡下的“冻结窗口”,然后选择“冻结拆分窗口”,则 B 列右边线和第五行下边线都出现一条灰线,前五行和前两列都被冻结;当往上移动数据时,前五行始终不动;当往左边移动数据时,前两列不动;操作过程步骤,如图6所示:

Excel)同时冻结前5行(前 n 行)和前两列(前 n 列)

图6

 

(七)取消冻结

1、选择“视图”选项卡,单击“冻结窗口”,在弹出的选项中,选择“取消冻结窗口”,则前两列冻结被取消,其它冻结也是一样的取消方法;操作过程步骤,如图7所示:

Excel取消冻结窗口

图7

 

2、提示:

A、如果再选择一种冻结方式(如“冻结首行”后,再选择另一种冻结方式(如“冻结前几行”),则“冻结首行”被取消。

B、另外,如果冻结后,“视图”呈灰色而无法取消,查看是否对工作表设置了保护(方法为:选择“审阅”,单击“保护工作表”或“保护工作簿”,Excel2003 在“工具 → 保护”中,如果要求输入密码,则设置了保护),如果设置了保护,取消保护就可以取消冻结了。

 

 

二、Excel冻结窗口用快捷键操作

1、冻结首行。按住 Alt,依次按一次 W、F 和 R,在第一行下边线上出现一条灰线,把滑块往下拖,数据往上移动时,第一行始终不动,说明它被冻结;操作过程步骤,如图8所示:

Excel冻结窗口快捷键操作

图8

2、冻结首列的快捷键为 Alt + W + F + C,按键方法为:按住 Alt,依次按 W、F 和 C。

 

3、一次冻结前几行和前几列

假如要一次冻结前 5 行和前三列。选中 D6 单元格,按住 Alt,按一次 W,按两次 F,则第五行下边线和第三列右边线都出现一条灰线;当往上移动数据时,前五行始终不动;当往左移动数据时,前三列始终不动;说明前五行和前三列都被冻结;操作过程步骤,如图9所示:

Excel用快捷键一次冻结前几行和前几列

图9

 

 

三、Excel拆分窗口

(一)拆分为两个窗口

1、假如要从第 6 行处或第 5 列处拆分为两个窗口。选中 A6 单元格,选择“视图”选项卡,单击“拆分”,则从第六行起被拆分为第二个窗口,往上拖第二个窗口的滑块,该窗口也显了标题行;再次单击“拆分”,窗口拆分被取消。

2、选中 E1 单元格,单击“拆分”,则从 E 列起被拆分为第二个窗口,往左移动第二个窗口的滑块时,第二个窗口也显示了与第一个窗口一样的数据;操作过程步骤,如图10所示:

Excel拆分窗口

图10

 

(二)拆分为四个窗口

选中 E5 单元格,选择“视图”选项卡,单击“拆分”,则把表格从 E5 处拆分为四个有同样数据的窗口;操作过程步骤,如图11所示:

Excel拆分为四个窗口

图11

 

(三)取消拆分窗口

只需再次单击“视图”选项卡下的“拆分”,拆分窗口被取消,图10已经演示。冻结行列与拆分窗口有异曲同工之妙,但它们一次只能用一个,如果已经用了冻结行列,再用拆分窗口,则冻结行列自动取消;反之亦然。

 

 

四、Excel冻结窗口用VBA(宏)

(一)从任意指定单元格处冻结

1、假如要从 B4 单元格处冻结。在 Excel 窗口,按 Alt + F11,切换到 VBA 编辑窗口,单击“插入”,在弹出的菜单中选择“模块”,则新建一个模块窗口,把以下代码复制到窗口:

Sub FreezeWindow()
ActiveWindow.FreezePanes = False
Range("B4").Select
ActiveWindow.FreezePanes = True
End Sub

单击“运行”,在弹出的菜单中选择“运行子过程/用户窗体”,则在 B4 处冻结前三行和 A 列,按 Alt + F11,切换回 Excel 窗口,B4 处已经出现两条相交于它左上角的灰线;操作过程步骤,如图12所示:

Excel冻结窗口用VBA(宏)代码从任意指定单元格处

图12

提示:如果要在其它单元格(如 C8)处冻结,只需把代码中 B4 改为 C8。

 

2、代码说明:

A、Sub 表示子过程(函数),FreezeWindow 为子过程名称;End Sub 表示子过程结束。

B、ActiveWindow 表示活动窗口,在这里表示 Sheet1;FreezePanes 表示冻结;ActiveWindow.FreezePanes = False 把 ActiveWindow.FreezePanes 设置为 False,表示不冻结 Sheet1。

C、Range("B4").Select 表示选中单元格 B4,Range("B4") 表示引用 B4 单元格,Select 表示选择。

D、ActiveWindow.FreezePanes = True 把 ActiveWindow.FreezePanes 设置 True,意思冻结 Sheet1,即从 B4 单元格左上角处冻结。

 

(二)取消冻结

在 Excel 窗口,按 Alt + F11,切换到 VBA 编辑窗口,把以下代码:

Sub CancelFreezeWindow()
ActiveWindow.FreezePanes = False
End Sub

复制到“工作簿1 - 模块1(代码)”(如果没有该窗口,单击“插入”,选择“模块”创建),按 F5 运行代码,再按 Alt + F11,切换回 Excel 窗口,B4 单元格左上角的两条灰线已不在,说明取消了冻结;操作过程步骤,如图13所示:

Excel用VBA取消冻结窗口

图13

 

(三)批量冻结窗口与取消冻结

1、从任意指定单元格处批量冻结所有工作表

A、假如要把每个工作表从 B4 处(B4 可任意替换为其它单元格)冻结窗口。在 Excel 窗口,按 Alt + F11,切换到 VBA 窗口,单击“插入”,在弹出的选项中选择“模块”,新建一个模块窗口,把以下代码:

Sub FreezeWindows()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In ActiveWorkbook.Worksheets
  ws.Activate
  Range("B4").Select
  ActiveWindow.FreezePanes = Not ActiveWindow.FreezePanes
Next
Application.ScreenUpdating = True
End Sub

复制到该窗口,按 F5 运行代码,按 Alt + F11,切换到 Excel 窗口,Sheet1 和 Sheet2 两个工作表都在 B4 处冻结了窗口;再按 Alt + F11,切换到 VBA 窗口,再按 F5 运行代码,再切换回 Excel 窗口,所有工作表的冻结窗口被取消;操作过程步骤,如图14所示:

Excel用VBA宏批量冻结窗口与取消冻结

图14

提示:如果要在每个工作表的当前选中单元格处冻结窗口,不要 Range("B4").Select 这句即可。

 

B、代码说明:

(1)Dim ws As Worksheet 意思是把 ws 定义为 Worksheet 对象,即定义为一个工作表。

(2)Application.ScreenUpdating 用于设置是否允许屏幕刷新,设置为 False 不允许,设置为 True 允许。

(3)For Each ...Next 是一个循环语句;ActiveWorkbook 表示当前工作簿,Worksheets 表示当前工作簿的所有工作表;For Each ws In ActiveWorkbook.Worksheets 的意思是,逐个遍历当前工作簿的每个工作表,且用 ws 表示当前工作表,例如第一次 ws 代表 Sheet1、第二次 ws 代表 sheet2,其它的以此类推。

(4)ws.Activate 表示把工作表设置为活动工作表(即当前工作表)。

(5)Range("B4").Select 意思是选中当前工作表的 B4 单元格,Range函数用于引用单元格。

(6)ActiveWindow.FreezePanes 表示把活动窗口(即当前窗口)是否为设置为冻结,把它设置 True,则冻结;把它设置为 False,则不冻结;把它设置为 Not ActiveWindow.FreezePanes,表示取与 ActiveWindow.FreezePanes 相反的值,如果 ActiveWindow.FreezePanes 的值为 True,则取 False;如果 ActiveWindow.FreezePanes 的值为 False,则取 True。

 

2、只冻结选中的工作表

A、以在所有选中工作表中的 B4 单元格处冻结为为例。在 Excel 窗口,当前工作表为 Sheet1,按住 Shift,单击 Sheet2,把 Sheet1 和 Sheet2 都选中;按 Alt + F11,切换到 VBA 编辑窗口,单击“插入”,选择“模块”,新建一个模块窗口,把以下代码:

Sub FreezeWindows()
Dim selWs As Worksheet
  For Each selWs In ActiveWindow.SelectedSheets
    selWs.Activate
    Range("B4").Select
    ActiveWindow.FreezePanes = Not ActiveWindow.FreezePanes
  Next
End Sub

复制到模块窗口,按 F5 运行,按 Alt + F11,切换回 Excel 窗口,Sheet1 和 Sheet2 都被冻结,Sheet3 没有被冻结;操作过程步骤,如图15所示:

Excel只冻结选中的所有工作表窗口

图15

提示:如果要求从每个选中工作表的选中单元格处冻结,把 Range("B4").Select 去掉即可。

 

B、代码说明:

代码与上一例基本一样,只是把遍历所有工作表改为遍历选中工作表,即把 For Each ws In ActiveWorkbook.Worksheets 改为  For Each selWs In ActiveWindow.SelectedSheets,SelectedSheets 表示所有选中工作表。