作者:绿色风
分类:
时间:2022-08-18
浏览:336
楼主 杨开科 |
注意:首行并非指第1行,首列也并非指A列,而是指屏幕上可见的第1行和第1列。 '冻结首行- Sub Freezetoprow()
- With ActiveWindow
- .SplitColumn = 0
- .SplitRow = 1 '拆分活动窗口,并使拆分线以上有 1 行
- End With
- ActiveWindow.FreezePanes = True '冻结当前窗口的拆分窗格
- End Sub
'冻结首列- Sub Freezebegincolumn()
- With ActiveWindow
- .SplitColumn = 1 '对活动窗口进行拆分,拆分线左侧留有 1个列宽
- .SplitRow = 0
- End With
- ActiveWindow.FreezePanes = True
- End Sub
'在B2单元格处冻结工作表窗格- Sub FreezeB2()
- Call remove '在工作表中已存上冻结窗格的情况下,须先取消窗口冻结,否则下面两行代码不起作用
- Range("B2").Select
- ActiveWindow.FreezePanes = True
- End Sub
'在B2单元格处冻结工作表窗格- Sub FreezeB2_1()
- With ActiveWindow
- .SplitColumn = 1 '拆分活动窗口,并使拆分线以上有 1 行
- .SplitRow = 1 '拆分活动窗口,并使拆分线以上有 1 行
- End With
- ActiveWindow.FreezePanes = True
- End Sub
'取消窗口冻结- Sub remove()
- With ActiveWindow
- .SplitColumn = 0
- .SplitRow = 0
- End With
- ActiveWindow.FreezePanes = False
- End Sub
'在第1行被冻结的情况下,若要选定单元格 A1,并向上滚动垂直滚动条以显示单元格A1,需要两个步骤,可先选定单元格A2,再选定单元格A1- Sub SelectA1()
- Range("A2").Select
- Range("A1").Select
- 'Range("A2").Offset(-1, 0).Select'也可将上两行代码注释,只使用这一句
- End Sub
或者使用Application.Goto 方法。- Sub GotoA1()
- Application.Goto Reference:=Range("A1"), scroll:=True
- End Sub
虽然双击单元格边缘的跳转到相应单元格或用来选定区域的方法很好用,但在工作表中冻结窗格的情况下会遇到一点麻烦。 例如,在工作表中第1行被冻结的情况之下,如果垂直方向上的数据超过了一个屏幕,那么双击最下面一行有数据的单元格上边缘,仍可以选定第1行中的单元格,但垂直滚动条并不会向上滚动(如所示),除非删除顶部单元格中的内容。如,删除A1中的工号后,在单元格A52中双击该单元格的上边缘,即可快速返回到A2单元格中。
冻结窗格.rar
笔者有两个问题待探讨: 问题1:运行冻结首行中的代码(与通过录制宏得到的一致),然后通过“视图”→“冻结窗格”→“取消冻结窗格”命令后,会留下一条拆分线,要取消冻结窗格的办法是直接单击EXCEL窗口中的“拆分”。 即使是录制冻结首行及取消冻结窗格的代码,再重新运行取消冻结窗格的代码,这条拆分线仍然存在。 问题2:在冻结窗口的情况下,为何不能使用双击单元格上边缘或快捷键快速回到工作表中的第1行? |
2楼 杨开科 |
经修改后的代码 '冻结首行- Sub Freezetoprow()
- With ActiveWindow
- .SplitRow = 1 '拆分活动窗口,并使拆分线以上有 1 行
- .FreezePanes = True '冻结当前窗口的拆分窗格
- End With
- End Sub
'冻结首列- Sub Freezebegincolumn()
- With ActiveWindow
- .SplitColumn = 1 '对活动窗口进行拆分,拆分线左侧留有 1个列宽
- .FreezePanes = True '冻结当前窗口的拆分窗格
- End With
- End Sub
'在B2单元格处拆分窗口并冻结窗格方法一- Sub FreezeB2_one()
- With ActiveWindow
- .SplitColumn = 1 '拆分活动窗口,并使拆分线以上有 1 行
- .SplitRow = 1 '拆分活动窗口,并使拆分线以上有 1 行
- .FreezePanes = True '冻结当前窗口的拆分窗格
- End With
- End Sub
'在B2单元格处拆分窗口并冻结窗格方法二- Sub FreezeB2_two()
- With ActiveWindow
- .Split = False '取消指定的窗口拆分
- Range("B2").Select ' 选定B2单元格
- .FreezePanes = True '冻结当前窗口的拆分窗格
- End With
- End Sub
'取消工作簿的窗口的拆分方法一- Sub remove_one()
- ActiveWindow.Split = False '取消指定的窗口拆分
- End Sub
'取消工作簿的窗口的拆分方法二- Sub remove_two()
- With ActiveWindow
- .SplitColumn = 0 '设置将指定窗口拆分成窗格处的列号(拆分线左侧的列数)
- .SplitRow = 0 '设置将指定窗口拆分成窗格处的行号(拆分线以上的行数)
- End With
- End Sub
'在第1行被冻结的情况下,若要选定单元格 A1,并向上滚动垂直滚动条以显示单元格A1,需要两个步骤,即先选定单元格A2,再选定单元格A1- Sub SelectA1()
- Range("A2").Select
- Range("A1").Select
- 'Range("A2").Offset(-1, 0).Select'也可将上两行代码注释,只使用这一句
- End Sub
'或者使用Application.Goto 方法。- Sub GotoA1()
- Application.Goto Reference:=Range("A1"), scroll:=True
- End Sub
冻结窗格.rar |
3楼 杨开科 |
关于问题1,录制宏得到的代码是:- ActiveWindow.FreezePanes = False
执行录制得到的代码,无法得到期待的效果,应使用下面的代码:- ActiveWindow.Split = False
关于问题2,除了删除顶部单元格中的内容外,不知有没有更好的解决办法? |
4楼 bluexuemei |
厉害呀! |
5楼 茶香留梦 |
我的认知彻底被颠覆了,冻结也可以用代码了,终归还是我的知识太少了 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一