Excel VBA 7.73首行/多行冻结很实用,如何用VBA来实现相同的功能呢?
Excel VBA 7.73首行/多行冻结很实用,如何用VBA来实现相同的功能呢?
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
当我们的工作表的数据比较大的时候,我们有时候为了观察数据的方便,就会选择首行冻结,将标题行冻结,这样当我们在向下滚动报表的时候,首行是固定的,这样就不会影响我们观看数据了,能够准确的知道每一列数据所代表的的含义和对应的内容。其实要实现首行冻结方法也是非常的简单,这是Excel自身就携带的功能
我们今天来看看用VBA如何实现
场景说明
其实应该有很多的小伙伴们会感觉到比较的疑惑,既然Excel自身已经存在了这样的功能,为什么我们还要尝试去通过VBA来实现呢?
其实这两有两个原因
1 我们学习VBA,一方面为了提升工作效率,另外一方面也要尽可能的多接触一些非常用的功能,这些点点滴滴积累起来也能够给我们的日常操作带来很大的提速
2 有时候我们需要再VBA程序中实现某种功能,这个时候我们不可能让程序暂停,去手工操作Excel的,所以这些功能也是需要用过VBA自身代码来实现的
3 最后一点,是我个人的一个观点,既然要学,就尽量学精,学多,这也是我当初逼自己挤出时间学习的动力和初衷
好了,最近有点多愁善感,进入正题
先来看看首行冻结,这个比较的简单
这是我们第一份工作表,表头只有一行,我们就冻结首行就可以了。
Sub 首行冻结()
ActiveSheet.Cells(2, 1).Select '选择单元格A1
ActiveWindow.FreezePanes = True '实现冻结窗格的功能
End Sub
但是一行的表头还是比较少见的,更多的时候我们的习惯还是喜欢做成多行的表头,那么这样如何来实现了呢?
Sub 多行冻结()
Dim rng As Range
line:
Set rng = Application.InputBox("请选择单元格", "确定要冻结行的下一行的单元格位置", , , , , , 8)
If rng.Columns.Count > 1 Then
MsgBox "请随机选择下一行的一个单元格即可,请重新选择!"
GoTo line
Else
rng.Select
ActiveWindow.FreezePanes = True '实现冻结窗格的功能
End If
End Sub
成功的实现了我们的效果,不仅仅是可以首行,还可以根据我们的实际需要选择多行来实现。
代码解析
因为Excel本身已经存在了这个功能,我们这里只是根据需要来转化成为用VBA代码来实现,操作更加方便一点,也不用记哪一步应该操作什么,根据自己的需要制作出自己能够熟练操作的小脚本。
ActiveWindow.FreezePanes = True
稍微说一下,这两个代码里面都有一个单元格的选择的操作,不同的首行冻结已经直接写死了,多行冻结可以根据自己的需要来选择
多行冻结中需要我们选择的单元格有几个要求
* 单个单元格,不能是多个,动图中已经展示了如果选择了多个,会报错
* 必须是冻结行紧挨着一行的任意一个单元格,比方说要冻结前三行,那就在第四行选择一个单元格
If rng.Columns.Count > 1 Then
MsgBox "请随机选择下一行的一个单元格即可,请重新选择!"
GoTo line
Else
*****
End If
这里会有一个判断,是判断选择单元格是否是多个的,这个方法如果还有小伙伴不清楚的话,可以翻看下我发布的VBA早间档的文章,不久之前才介绍过这个方法的详细说明。
==========================
本节课的案例源码已经上传,需要的小伙伴后台私信“7-73-A8”,希望大家多支持~~,多多关注 ~ ~
好了,明晚21:00,准时再见!
因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。