好,同学们,这节课我们给大家讲一下啊,我们的工作表图形 这边呢,我们可以看到这个工作表上面啊,有很多图形,一个是单选按钮的一个图形啊,一个是一个插入的一些这边插入的一个图形,这边插入的一个图形,然后一些是分组靠命令按钮, 艺术字,还有一些图片啊,这个是我们的一个公众号啊,所有信息更新都在上面啊,这个呢是一个我们 qq 学习群, 然后可以加,有兴趣的同学可以加一下。然后还有一些我们这个文本框,艺术字啊,都是我们工作表的图形图形集合啊。首先我们讲一下我们这边呢,比如说这边 有一个单纯按钮,我们选的时候他另一个都会被取消选中,我们选的那个,这个说明是相似的啊,相似的, 那么我们在做一个调查问卷的时候,就需要做到很多题单选,就说我们这一个做一个单选,这一个做一个单选,但是他现在是相似的,怎么办呢?我们在这一边这个开发工具里面 添加一个叫呃分组框的东西,就是这个东西,分组框的东西,他呢可以做到一个分组啊,我们这边呢框中我们要分组一些单选贡献啊,然后我们再添加一个, 再添加一个, 那么这个时候呢,我们取消掉啊, 去甩他这边呢,就可以做到这边甩一个,这边甩一个, 他的效果就是这样子啊,这个东西呢,这个分组框这个东西啊,分组框这个东西他是在啊我们这个 office 里面才有的啊,在我们这个 wps 里面啊, wps 里面他在开发工具里面 他是没有这个表达贡献的,他没有这个,没有这个分组框,看到没有,他是没有的。 头像头像,头像头像,他是,他是要添加,要注册别的或者是另外一些插件啊,我们回到我们这边,回到我们这个 office 里面啊, 然后我们这边怎么去判断我们这个图形是哪一个图形呢?我们这边 设计模式,然后进入到我们双击进入到我们代码界面啊,我们这边进行一个 am 定义一个 h, s, b, s, 这边定义他是一个图形 shape 啊,就是这个 ssip, 然后我们这边很快,然后我们用什么方法呢?我们用电力图形的方法去判断啊?我们这边的 f 二 ebach 电力, 而且雪地,我们的图形是在哪里呢?是在我们这个工作表里面,在哪一个工作表呢?我们这边呢 目前是 shat 一,还有这个 shat 这个工作表的这个他的名称如果指定的话,你就改成指定的名称就行了。以后指定完之后呢,我们这边工作表名称里面的一个 s, h, a, p, s 的图形集合, 然后呢我们这边呢输出我们的图片 app, 输出的话,我们这边带 a 一单元格输出啊,然后用这个 o f, f svt, 然后偏移偏移哀行偏移灭,然后我们这边呢他的信息等于 shd 填, 就是我们图形的一一种类型啊,然后我们这边呢这一条,这边输入他的类型,然后这边他我们再输出一条输出,输出他的名称名称啊,就是类, 我们这个时候呢就要偏移偏移以列了,刚刚是在 a 一这个 被列输出,然后输出他的类型开法,然后我们内就是偏离列,就是在必列输出他的内,然后我们每输出完一个啊,这边呢都要自称一下 i, 等于 i 加一,就是往下 往下一旁,然后我们这边补偿我们的 ntst, 就是补偿我们的货,然后我们这边, 然后我们这边呢就就就可以看到了啊,他第一列输出他的胎粉,往下啊,就是输出第二列输出他的名称。我们这边呢可以看到我们平时输出的一个 图片,为什么要选择衣服,他的名称就是他的胎盘等于十三呢?因为十三他的对应的就是图片啊,就是对应的图片,然后我们看名称可以知道啊,他的每一种,同一种的,同一种类型的,他是要那个, 他是要那个名称是一样的。比如说这个图片,他的图片呢都是啊 p 血十九, p 血二十, p 血二十, p 血什么二十三十 之类的,前面都是批选啊,这个是图片啊,然后我们的单选呢,单选后面的就是我们这个啊, opto n 这个, opto n 这个,然后呢啊,我们怎么去筛选我们指定的一个图图片类型的? 我们这边啊找到我们一比一啊,在这边呢我们再进行一个判断,这边呢再加一个页,我们判断这个图片名称 ssp 连累我们判断的名称, 但是他的名称都是不定的啊,他只有前面部分,前面部分是定的,后面部分是没有定啊,我们所以这边呢用到一个模糊匹配啊,模糊匹配我们拉开黑他的名称价。 什么呢?我们用到一个通配符,两个星号,然后中间呢,我们这个就是输入共同的部分啊,共同的一部分,比如说我们想要一个图片,我们这边呢就是 p i ct, 然后这边呢有阿姨,前半部分是 这样子的,后面部,后面部分我们就打他啊,然后如果他的名称图片名称像这个就是含这个皮癣的话,我们这边的电水也输出输出他的这个 类型跟名称的啊,我们这边缩进一下,手好看一点啊,看我们这边组成这个案子页啊, 那我们再次 这边在清掉清掉这两个这两列,然后我们这边再进行一个输出啊,再进行一个输出看一下,哎,这一下他就可以甩到我们指定类型的一个 指定名称的一个图片名称跟他的类型啊。如果我们这边想要一个, 想要一个,比如说这边呢,他是三十、三十二,我们想要图片里面的序号三十,三十到四十之间的,怎么办呢?我们这边呢 仍然可以去用这个去判,控制他这边加一个空号,然后这边呢还有一个三,那么他就可以控制到这边的三了, 所以我们这边的这个使用方法就是这样子啊。然后我们轻松一下, 这节课呢,大概就讲到就讲到这里了,有兴趣的同学可以关注一下我们这个,关注一下我们这个公众号啊,你看我们这边呢,他筛选三,他就筛选出来三,三开头的,后面就 领取验证啊啊,有兴趣的同学可以关注一下我们这个公众号,公众号上面的 我放了一些资料啊,有兴趣的同学可以回复公众号领取这个资料,学习啊,然后这个是我们这个学习学习群在 qq 里面 啊,可以加一下,大家可以在里面互相探讨啊。好,同学们,这节课我们就讲到这里了,同学们再见。
粉丝1075获赞2923


大家好,下面给大家讲一下使用 vba 窗体界面和皮卡与引擎结合,实现中国象棋人机对立的过程。在前段时间,我开发过四个不同 界面的象棋软件,就是 excel 版, powerpoint 版以及 auto cad 块参照版,还有这个 v b v b 版,那么 v b 版呢,我做过两三个, 那么前面四个啊,这个界面实现起来呢,也还行,但是他们前四个的特点呢,就是象棋水平,他是由这个呃,象棋云库的 提供的招法,它是一个联网的,如果没有互联网的话呢,就没有奇力了。然后今天呢,我尝试用这个 vba 窗体 来调用皮卡与引擎,那么很成功,所以呢,我用这个视频给大家讲解一下过程。好, 首先打开 excel, 然后打开那个工作部,这个文件一打开啊,就有一个功能区, vba 中国象棋,然后有三个空键,电脑红方旋转棋盘,对局,开始 这个就是界面,然后呢,呃,这个 炮二平五,红方走棋,那么黑方呢,就调用了匹马八进七,那么就会走这个黑方的招法,反过来,如果我点电脑红方旋转棋盘的话呢,就反过来了,那么这个引擎会走红方 先呢,暂时把它关了,然后给大家看一下界面怎么做做出来的。打开这个 v b a 编程画面, 这个工程结构呢?呃,为什么叫 v b a 窗体版呢?虽然说它是 excel 做的,但是这个象棋啊,它和 excel 一点关系都没有,也没有用到单元格里面的数据,整个是个空白表,它只不过用了 v b a 环境里边的一个窗, 还建了一个窗体。那么这个主要代码呢?在窗体还有模块,还有类模块里面,首先打开窗体,这个窗体呢是预先放进去的,这个棋盘怎么做出来的呢 啊?也是非常的简单,他这个空间呢,一共三十三个,有三十二个棋子儿,再加后面一个背景图啊,三十三个, 那么把这个界面啊,把窗口拉大,看这个棋盘可以随便拖动啊,这个棋子呢也是放上去的啊,那么这个当然这些棋啊,他都是图片 啊,这个图片当然你要预先准备一个来源啊,这个有大量的素材,大家既可以从互联网下也可以呢,就是找我要这里面我做了大量的这个棋子啊什么的,各种图都有啊, 所以说你要做界面的话啊,你就得有这些棋子,而且呢你还要有要有这个啊,棋盘像我刚刚给大家看的呢,就是调用呃,使用这个蓝线啊,就这个棋盘, 哎这个棋盘,所以说这个棋盘的布局也是非常的简单,那这里边 简单的给大家就是从空白做一个啊,就是这样插入一个用户窗体,然后把它适当的拉大,然后第一步首先从这里面找到图像空间啊,空间工具箱有一个图像空间,然后哎拉个方框, 然后接下来呢在这个属性窗口里面点一下 picture 哎图片,然后呢你去浏览一副棋盘图,比如说他,哎这个棋盘进来了,对不对? 然后接下来再放三十二个棋子,这个棋子怎么放呢?也是一样的,放一个这个,放一个这个空间,然后选择 picture, 然后呢再去随便找一个棋子啊, 放上这个,是啊,然后接下来呢去设置他的若干属性啊,比较重要的属性, 那么第一个就是他的有一个 outsides, outsides 呢,就是说他的尺寸是自适应的,就是根据起籽大小能够自动适应,所以点处, 这样的话,你看它的大小特别合适啊。第二个,把边框线隐藏了,所以选择 border style, 然后选择这个,哎,选择不要边框线啊, border style number, 这样他就没有变光线了。然后第三一个,呃,还要把它这个 back color 啊,他有一个背景色啊, back color 要选择调色板系统,我记得是不是有个透明 yeah, 有点忘记了啊。呃,可能是 backstyle 啊,背景样式要选择 backstyle transparent, 就是说,哎,透明背景这样的话呢,你把它放上去啊,就刚好合适啊,看不到后面的格子线, 然后同样道理,这个棋盘也是一样的呀,你要选择 out of size 为处,让它自动调整大小,然后显示整个棋盘,看特别漂亮啊,然后把它放到合适的位置。 当然你下完一盘棋,如果我要新建一局的话呢,你要把每一个棋子按照行列数整齐的对齐到这上 就可以了,特别简单。然后接下来跟大家说一下,为什么点了这个棋子挪到另一个地方,能吃对方的棋子呢?怎么把它吃掉的呢?这个地方给大家看一下代码,这地方啊,通通过一个类模块啊,实现的, 这个类模块呢,因为棋子特别多,三十二个棋子,你要说给每个棋子都设置事件的话,那么过程也会很多,需要三十二个 这个 v b a, 过程那特别繁琐。那这里面呢,我们用一个这个类模块啊,用 residents 来声明一个这个 v b a 的一个 emit 空间,这样的话呢,他就支持这个 mouse down, 就是 按下鼠标这个事件,那从这个事件里面呢,就可以判断出我点的是哪一个。这个图片啊, i m g 这个变量呢,就 就是被你点的那个棋子啊,当然可以预先设一些他的太个属性是什么的啊, 然后这样的话呢,就可以识别他是你要移动起子呢,还是你要吃子呢?这个地方有详细的代码,这个 啊去解释,那么最后如果吃子的话呢,要调用这个 go 方法哎, call go r e c r r c r, 意思就是说从从第几行第几列移动到第几行第几列,哎,做这个操作啊,就可以了。 好,那么这个是他的制作过程,也就是他的最难的地方呢,就是这个类模块啊,这个类模块,哎,通过这一个类模块,我管理三十三个空间的这个事件。 当鼠标点到棋子上做什么?当鼠标点到这个棋盘上又要做什么?那么当点到棋盘上呢, 要注意了,因为象棋棋盘啊,它是一个网格,那么鼠标有时候会点到网格的交叉点上,有时候会偏一点,那么怎么容叉呢?就是怎么容错呢?那这个地方,大家看这个代码哈,就是说 x 和 y 这个地方啊, mouse down 返回两个参数 x 和 y, 那么你要减去四点五,这个四点五呢,是棋盘的左边的那个空隙 啊,空隙的宽度减去他再减去半个棋子的宽度,棋子的宽度是四十二啊,要减去半个棋子,然后再除以那个 格子的宽度啊,因为象棋横看是八个格子,立起来垂直方向是九个格子,那么你用 x 减去它,再减去半个棋子,再除以格子数,那就是它的列数,同样道理,二二零就得到它的行数, 这样的话,你才能知道当我把一个题材走到空白的地方,他去了哪了。哎,所以啊, c 零和二二零就是一个计算过程。 好,那接下来我们看一下这个引擎的部分啊,引擎呢? 啊,其实有很多,但是目前来看啊,这个 pickaface, 它是全世界最强的象棋引擎。那么这里面哎,大家可以在互联网下载到七八个,但是 和自己的机器适应的呢,一般选择皮咖啡是 modern 点 exe 啊,选择这个引擎,那么我们在程序中调动它就可以了。好,下面呢,我把这个工作部呢,先不保存关闭一次啊,然后再次打开。 好,呃,首先呢,走一盘这个,我是红方的棋啊,这个在掉入引擎的时候啊,这个引擎这个黑窗啊,我不会隐藏,所以说呢,哎,走的时候他一闪一闪的,这个套二就解决了, 那么他会记上三个。马八进七,然后就出招,马二进三,车九平八,车一平二, 促七进一,车二进六,马二进三,兵七进一,炮八平九,车二平三, 炮九退一,马八进七,车一进一, 狙一进一,炮八,瓶酒,马三退五,哎呦,要打死狙,泡酒瓶气打我死狙。看一下啊, 这个地方如果上马是不行的啊,马骑进六的话,一打狙狙躲不开啊,炮五进四,打过去僵一下, 将一下,他把我踩了,这地方有点不会啊,要不我来个一换二吧,居九平八,他如果打我,我就把他马砍了,然后再把炮吃了。车九平八,炮九平七,炮五进四可能不太好啊。打完足 他如果走,马五进三怎么办?我打足他,马五进三弹出来了,我把他炮吃了,他打了我句我再吃个马,他再飞个象。 呃,现在如果砍马,他弹出来也是车三进一。不,车三进一了,马五进七,他有个车进一对车,车八进七,这地方有车进一,对 车一进一。哎。对对对,对了啊,其实他也可以飞象啊,飞象更加简单。我觉得他对狙,当然我不能跟他对狙,对完狙没法下了,没有狙了,那只能狗狙吧退二了,或者狙吧进而吃象吃象,他飞了退二呢?他也是飞象, 或者他会走狙八进五,狙八进五,我兵五进一,车八退二,车八进六,进六进六的话进六啊他。他这个这招切的特别准啊。 这地方不好下了,我不行,还得走炮五脱一呢,然后炮五平三打他。现在马七进六,上去的话,他会毫不犹豫砍兵的。我踏足 有点不敢呀。 马七进六,车八停七。嗯,这样的话,你车压住马,两个炮不敢动,动一个他就卡马了。呃,如果灯阻,他直接踩了我,我车八平,我吃回来 坏了,这棋要输啊,要不就蔡祖采菊。 炮五平七,炮五平七,车一平四,马六进七, 向七进五,这得补一补向了。向三进五,对方 居四进四,香三进五,车七平六, 炮七进一打狙,对方进狙切不行,炮九进四打足也是个选择,对方足七进一,要拱拱马,所以要四四进五,这样将来呢,可以回马。车六退二 对狙不行啊,我兵器进一,他砍,我进狙吃炮,他只是打我,所以狙退一,车八退一, 促七进一。哎,果然推过来了,这个毒如果飞了,他炮砸过来了,那我亏个象不行啊, 炮就进四打过去,或者是进马采狙。进马采狙,他怎么下来踩不住?兵器进一,他足迹进一拱,我 敢不敢飞?不敢飞啊, 刚才车多退一步好了,退到这里,然后走兵五进一好了。这个车退的随意了, 靠近四 促七进一,我如果马三退四,对方炮九平,炮七平八,我马三进二也还行。马三退四 加五进一。嗯,上降,这个是软件走的招吗?上降怎么回事? 上将,我来个采狙,然后再炮九将打他怎么办?马七进八,车四平一 局四平一局四平一。我来一个 coach 瓶酒, 炮七瓶酒。 将五退一。马八退六,兵九进一,炮九平一,前炮平一, 车一进四,砍过来了,推地包僵一下。哎,这个地方回马能僵一下啊。马八退六, 将五进一,炮一平三,他敢打我吗?他如果打了我,我狙八进四,将,死他啊。炮一平三, 炮七平六,炮七平六,这个棋还有有所转机。这个棋哈,兵器进一,对方退居卓玛。 兵七进一,车移退四,退居卓玛呀,我来个居八平六啊。 车八平六, 象五进三,毫不犹豫,我,我还不敢蹬他蹬的话,平局杀了他毫不犹豫啊。炮九平起打象,他把象落回去。那我把他炮踩了。算了,下个河棋吧。马六进四, 将五平六平六了,杀个四还行。车六进五,向三退五退去,将一下,他起四啦, 然后看怎么能捉他这个马呢。车六退五,车六平七,平局将一下子回去了,这炮的跑啊, 好,三平二,将六平五。 老江回去了, 这个前面的炮没有用,先平局防止他上马,但他上外马,上外马防不住呀,来个炮二进一,不让他跳马, 那么他居四进四,吃我中兵,要不就走一个居六平一,准备底线打,将车六平一,车七平八,再把马扣住。靠二平三, 车八平七,常说啊,好,三平二, 车七平八,这个地方啊,靠二处理,这个黑方常着我呢。车八平七,好,那么这一盘呢,就下到这里啊,他他常着我,这个地方我需要处理一下 他,根据这个当前局面,他觉得就是吃炮是最好的招法。当然我也可以选择变招啊,比如说走个炮九进四啊,单子炮,但是那样的话, 他一拱足吃我俩炮,那我不行。好在这个改变一下选项啊,让这个软件走红方。马二进三,促七进一, 兵七进一,马八进七,马八进七,向三进五,车一进一,炮二进四,车一平四, 马二进三,马七进八,炮二平七, 镶三进一,炮八,瓶酒。车四进二, 捉死炮了。马七进八,车九进一,他下一步居九平四,双居,吃我点四,所以我四四进五是四进五,车九平二, 这个感觉不大对劲啊。狙一平四,想开出来。车一平四,马八进七,吃了我个足, 马八进七,接下来他进去切我象腰,然后吃我中象, 所以呢,我走炮九进四,打他的狙 泡,究竟是打狙? 他如果前往下腰,我进去吃马,他兵器进一啊,是这么个变化,靠九进四, 车四进一,没有吃,没有去威胁我的中下,那他没有威胁,那我就抛弃平衣了啊。 炮七平一,担子炮多好。炮七平一,车四平二出马。 哎,这个地方有没有泡酒瓶八打他车子骑呢?没有用,马八退七, 后车停吧。哟,这个车来回闪什么意思? 要下底啊,要下底,我平抛,打一下狙, 要不就打一下马,打一下马,他反而跳边马了,然后我走马三进二, 哎,这个炮一平三感觉不错哎。哎,打马,那他上去怎么办?哎,退回去,退回去。 想一下啊,我感觉应该走炮九平七。炮九平七呢,一方面把他这个三路马压的死死的,另一方面是给我自己的马生根。炮九平七相当好啊。兵七进一。兵七进一 不能飞吗?飞了怎么了?我把它飞了,他没啥棋啊。项目进三,车八平七,车八平七,我炮一平三到达。你的马 有倒打马敢吗?这个有一定的风险呀。倒打马他他万一弃马呢? 比如说他走过兵五进一,我把他马打了,他把我象吃了之后还吃我七路走,我丢了太多。如果,呃,走这个车四进四呢,也不安全。 狙四进四,对方炮八进三打狙,我落相,他踩我中相吃个马。但是总体来看呢, 平炮可能会好一点啊,炮一平三可能会好一点。车二平七。哇,这么严厉,俩狙都过来了,那这象不能给 象直接往回退,他踩我中象,我飞了,他狙杀下来。 呃,如果我先抬车,他必然走,炮八进三,车四进四,兵五进一。 漏算了漏算了,这时候他再走兵五进一可麻烦了。车四进二,他跑, 炮二进一,打火狙啊。前车进一,炮三退三,前车进一,防不住了,这个棋回马,他进炮抽我。 厉害厉害。 马三退二呢,他进去僵一下把五马还是白吃了,你退去手呢?他进炮打你。 车四退四,这个炮二进五进五都有了,前车进一。哦哦,对,车四平三,这是霸王局啊。车七进六,车九平八, 车七进二是五退四。车七退八啊,准备进炮枪呀,是四进五, 靠二退一啊,厉害,生根之后再抽我啊。那我能让你下来吗?靠,七平二,那你还能下来吗?靠二平五, 这我不就车八进六了?丁五进一,哎,不能拱,这棋下的好,拱的话进去底线绝杀。你不拱他拱我呢,所以要占位啊。车八平四,赶紧出将 兵五进一,将五平四,炮五平六, 车四平七,不行,得先打一枪炮把平六重破,绝杀。将四进七,重破了重破了,坏了坏了。炮八平六,好七好七,厉害 好。那么这个啊,皮卡鱼象棋呢,就给大家讲到这里,至于说这个引擎的详细呢啊,以后我有时间再给大家讲好。

同学们,欢迎回来上节课,我们理解了面向对象的核心类对象属性方法,今天我们就把这些抽象概念落地。精准操作工作表这个最常用的对象。之前我们写代码时, sales 五逗号三等于一百, 能够直接修改单元格。但这有个隐藏前提,默认操作的是当前显示的工作表。 如果想修改其他工作表,或者同时操作多张表,这种默认操作就会出错。今天我们就学会打破默认,精准指挥任意工作表。先看一个简单的程序, sub 输入 程序内容是 sales 五逗号三等于一百。问题是, sales 五逗号三指的是哪张表的 c 五单元格?答案是当前活动工作表, 也就是屏幕上显示的这张。如果此时显示的是 set 二,那么修改的就是 set 二的 c 五。如果显示的是 set 单,那么修改的就是 set 三的 c 五。这和我们想修改 c d 一 的初衷相背,这就是默认操作的局限, 只能操作当前显示的工作表,无法跨表。精准操作是我们的需求是运行程序是修改 ct 一 的 c 五单元格为一百,而非当前表。这个问题的核心思路是用对象变量作为遥控器,精准指向目标工作表, 通过遥控器发送指令。那如何通过代码实现呢?我们看屏幕中的程序,我们对代码进行拆解, dim w s as work sheet, 意思是告诉 vba, 我 现在需要一个遥控器专门控制工作表,或者说 我要定一个变量 w s, 这个 w s 是 一个工作表对象。第二步,关键步骤,对变量 w s 进行赋值,赋值为 worksheet 三,也就是工作簿中的第三个工作表。注意,如果忘了写 sheet 会报错,这是初学者最常见的错误之一。 对象变量必须用 sheet 进行配对,普通变量直接写 x 等于十等方式进行赋值。 worksheet 三是指工作簿中的第三个工作表, set 是 对象配对的专属关键字, ws 点 worksheet 五,逗号三等于一百,意思是通过遥控器 ws 精准修改工作表的 c 五单元格。也可以用之前的理解方式,我们读作 ws 工作表的 sales 逗号三单元格。那么既然 ws 能指向 worksheet 三,那么也能依次指向 worksheet 一, worksheet 二配合循环变量,是不是就能批量处理所有的工作表?现在我们要给所有的 c 五单元格进行赋值。我们看屏幕中的程序,用 for 循环, 循环,从一到五,每一次循环向 ws 进行赋值。赋值后对该工作表 录入一个数据,这个数据是一百加 i, 那 么这个程序运行后,就会对五张工作表的 c 五单元格分别显示,一零零一、一零零二、一零三、一零零四、一零零五。 通过循环加对象变量,我们实现了批量自动化操作。但现实工作中,工作簿等工作表数量可能会发生变化,比如新增一个 sheet 六, sheet 七, sheet 八。 此时我们可以用 worksheet 点 com, 也就是工作表总数的属性进行动态适配。我们看屏幕中的代码,首先我们依旧定义一个 w s 对 象变量,这个变量是一个 worksheet, 也就是工作表对象。 然后定义一个 i 变量,这个 i 变量是一个整数型。关于变量类型,后面我们会单独讲解,然后定义一个总表述变量。同样是一个整数型,然后利用 worksheet 点 com 属性计算工作表总数,然后将工作表总数复制给总表述变量。负循环, 从 i 到总表述进行循环,每次循环将 i 变量复制给 w s, 然后在 w s 的 五逗号三单元格写入数据。这样无论工作表有五张还是五十张表代码都能自动便利所有表, 这就是对象加循环的灵活之处。我们运行一下程序没有问题。除了控制所有表,我们还能通过 worksheet 点 a, d, d 方法创建新的工作表。 a, d, d 是 worksheet 集合的方法,代表添加动作。我们解释一下这个程序,首先创建一个新的工作表,赋值给 w s 变量,然后令 w s 工作表的名字,也就是姓名属性定义为我的新表, 然后在刚刚的新表中的 sales 一 逗号一单元格中输入,这是程序自动创建的表,运行一下程序没有问题。那么我们如何通过循环 批量新建工作表呢?很简单,同样我们写一个负循环,每次循环进行一次表格创建方法,并将数据表 i 这个值赋值给新工作表的 name 属性,然后在新建的工作表的 sales 一 逗号一单元格中输入。 这是我创建的第几张自动生成的表,我们运行一下程序没有问题。本节课核心总结,打破默认 range sales 默认操作的是活动工作表,跨表操作需要指定对象。对象变量的三步法,第一,声明变量 dim 变量名 s 类名,比如 dimws。 第二步,配对 sheet 变量名等于具体对象,比如 sheetws 等于 worksheet 过号一这里需要牢记 sheet 关键词。第三,使用变量名点属性或者变量名点方法来调用对象的属性和方法,比如 ws 点 name 或者 ws 点 a, d, d 常用的属性与方法 worksheet 点 a, d, d 方法用于新建工作表 worksheet 点 name 属性 用于设置或者获取工作表的名称。批量操作循环加对象变量,能够轻松控制所有工作表。恭喜你,你已经能游刃有余地操纵工作表了,下节课再见。


大家好,我是 cc, 从今天开始我们将学习 vba, 从入门到进阶五十讲中第二讲座 vba 过程、对象、属性、方法。 那本节课也是围绕这四个方面讲起,第一个是 vba 过程,第二个是 vba 对象,第三个是 vba 属性,第四个是 vba 方法, 这四个概念是组成 vba 代码的基本组成部分的。我们要学习 vba 首先要从这四个方面学起。那么首先我们来看一下 vba 过程, 那违背过程呢?包括三类,第一个是撒不过程,第二个是函数过程,第三个是属性过程。 首先我们来看一下撒不过程,那么撒不过程呢?实际上就是我们说的红, 我们平常啊见到最多的也是撒不过程,那么撒不过程呢?既然是撒不过程,那肯定是以撒不开头,然后空格,空格后面是什么意思呢?就是你为这个过程呢取一个名字就给他命名, 就是你,你开发一个工人呢,你要做一个什么东西啊?你肯定要给这个工人取一个名字,比如说我随便取个名字要收入十万,然后回车键,那么这就是萨不过程。 那我括弧里面是放参数的,这个大家知道就可以了,知道只是知道他是放参数的就可以了。于在后面后面课程中啊会具体讲到,那么这是开始,这是开始啊, 开始,这是结束。结束。那么代码是放在这个里面呢?代码是放在这个里面,不能就是把代码放在 放在外面,放在外面,他是他运行不了,他是一个无效的过程。我运行看一下,他运行不了的,他是一个无效的过程呢?代码是放在这个开始和结束的空间呢?代码是放在放在这里面的。 那第二个是方形过程,函数过程,那么函数过程,函数过程,那是以 fong 型方形开始,然后空格,空格后面就是给这个函数取个名字, 里面放参数,那么开始和结束,那么代码是放在啊,这个里面呢?他和撒过程,呃起上是一样的。 那么第三个是属性过程,那么属性过程呢?一般情况下不实用,因此在在本课程的五十讲中啊, 暂时不讲属性过程,会在 vba 提高篇中啊,种类模块会讲到属性过程,到时候大家再去学习。属性过程呢,那么这是 vba 过程, 那 vb 过程呢?大家要知道是以什么开始,以什么开始,然后后面后面是他的名字,就给他命名,然后代码是放在放在里 里面呢,放在结构的里面,放在外面他是运行不了,那么这是 vba 过程。那么接下来我们看 vba 对象,那 vba 对象 其实在,嗯,其实对象在我们生活中啊,也无处不在,比如说啊,比如说手机、笔记本电脑,鼠标、键盘的,这都是对象,你比如说啊,你比如说鼠标, 鼠标,鼠标什么形状的,它什么颜色的,那么这是这是鼠标的特点呢? 它特点,颜色,比如说颜色啊,形状啊,特点,嗯,手机啊,手机什么型号的也什么颜色的,那 v b 对象,那么 vba 对象是具有,是 vba 对象是操作具有方法属性的,也是中支持的对象。用通俗的话说,用通俗的话说, vba 对象是指被 vba 代码操作的目标, 比如工作部、工作表、单元格,图形菜单等等,那这这是什么意思呢?这个意思就是说你操作什么,什么就是对象,你比如说单元格 工作表,我给工作表重命名,删除工作表,新建工作部,那工作部工作表当然个,那么那么就是对象, 那么一个是 vba 编程的, 使用最多的动作就是一个 sear, 各种对象 不工作表,单元格啊,他是使用频率最高的,特别是单元格,那么既然这三个是使用频率最高,那我们必须要知道啊,这三个他的表示方法,他是怎么表示的?就是说他是怎么写的, 我们一定要知道。如果我们不知道工作部工作表,单格啊是怎么写的,那么那么那么后面课程学习学习起来是非常困难的。 那首先我们来看一下工作部啊,那么工作部我可 books 是代表工作部集合,表示所有工作部。你比如说啊,我打开了五张工作部, 那我可 books 就是表示这五张打开的工作部,那我可 books 括弧二是表示所有打开工作部的第二个工作部, 比如说改成一,那么他就是所有打开所有打开工作部的一个工作部。那如果改成三呢?他就是所有打开工作部的第三个工作部啊,那我可 books 括弧双引号,工作部名称, 他是,他是来表示具体是哪一个工作物,比如说啊,比如说,嗯,这张工作馆就是这张工作啊,他的名字是二段号,过程 段号,对象段号、属性段号,方法点, x, a, l, m 呢?那么它的名字是包含后缀的 它的名字是包含后缀的,它的写法是这样的,它的写法是这样的,我可 books 我是这样,比如说我在桌面上新建了一张工作,比如说叫 a 公司啊,那么他的写法就是,我可不不可思 括弧刷完以后啊刷,比如说 a 公司, a a 公司啊,第二, x l s x 啊,那么工作部啊,名称呢?是爆款后退的,这个大家要知道,那么 x tf 我可不可正在操作的工作部?比如说啊,比如说我这里这个就是正在操作的工作部,也是活动工作部啊,也正在操作的工作部。 this workbook 是代码儿所在的工作部,它和它 active active workbook, 那不一样啊,你正在操作工作部啊,代码不一定正在操作工作部,它是在 这一次,我可不个中,这一次我不就是代码所在的工作部啊,那么这是第一个工作部,那么第二个工作表, shares shares shares 工作表名称就是具体是指哪一张工作表?比如说啊, 比如说我的工作表就是我的工作表,他的表示方法就是 cheers 爆红放以后我的工作表我的工作表,我的工作表, 那就是这样表示的。那比如说啊,比如说这个叫销售部呢?销售部,那么他的他的表示方法就是 shift 刷牙膏。销售部, 那这个是,嗯,表示具体的哪一张工作表?就是工作表名称 c s 括弧双元号工作表名称 this 括弧二,是按照排列顺序的第二张工作表。比如说啊,比如说我的工作表,我的工作表它,它就是 ciris 括弧二,就是它是第一第二,它是在第二张, 他是谢的三。那么销售部呢?销售部写上就是谢的三呢,他是在第三张,按照排列顺序,他是在第三个,一二三他是在第三个。如果就说你把销售部把他位置对调一下,那么销售部啊,他就变成谢的是一了, 就现在是括弧里面的。呃,一二三四五啊,他是按照排列顺序,按照排列顺序啊,按照排列顺序,那么 谢特一,这这个和上面有。呃不一样,是表示第一个插入的工作表,你比如说啊,比如说我插入一张工作表,谢特二,他是, 他是按照插入的先后顺序,不是按不是按照排列的先后顺序, 这个不一样啊,这是按照插入的相互顺序。 active active shit, 是正在操作的工作表,活动工作表,比如说我,我现在正在操作这一张工作表,那么这一张工作表就是 active active shit, 这个 shit 二啊,就是正在操作的工作表。那么 罗克写的,罗克写的史上和上面三个他的写法是一样的,但是他不包括图表工作表和红工作表,他的写法和上三个写法是一样的,但是他不包括图表、工作表,红工作表, 这是第二个工作表。第三个是单元格, sars, 表示所有单元格, 比如说啊,把这全选上,那么这就是所有单元格 sars sars, 那么这 range 单元格地址,那么这个 run。 比如说 a 一啊,放一个 a 一, 那么他就表示单元格 a 一。比如说 c 十啊,他,他就表示单元格 c 十,那么就是 c 十啊, c 十,忘记单元格地址,那么如如果改成 a 一 比 c 十,那么就是 a 一到 c 十,就表示这个 a 一到 c 十。实际上从这个明灯框里面也可以看出啊,比如说 a e c 十。回车键呢,他就表示 a e b c 十,乱接 a b c 十, 那么 sars 函数列数,你比如说啊,你比如说 c 二,或者是 c 三, 比如说 c 五,那么 c 五用 sars 函数列式怎么表示呢? c 五,它是在第五行, 它是在第五行啊,第五行,那么 c 呢? c 五,你看 c 五,它是在第五行,它是在第三列,那么第三列,那么这就表示 c 五,比如说 c 五的值, 所以值等于一百,那么这个就是 c 五, c 五的值等于一百 c 五。你不能像那个 run 的写法一样把它搞,把它写成双引号,这是不行的,这是错误的,或者是这样,这也是不行的。 它的函数和列数啊,是用数字来表示的。 x 函数,列数是用数字来表示的。那么 act, teeth serve 是正在编辑的单格和正在操作的单格,比如说啊,我输了一百,那么这个 b 三呢?就是就是 active serve, 就是正在操作的单格, 那么 slag 型是被选中或选中单格区域,比如说我选 a 一到一二十,那么这就是一个 slag 型,比如说我选 b b 到 c 十,那么这是这就是 spec, 那么这个是 spec 型, 那么这是第三个单元格。那么这个 vba 对象,大约呃,就是 新手要多写多写,多写多练呐,这个很重要,那么这个是呃, v b a 对象, 然后接下来我们看 vba 属性和方法,那么 vba 属性呢? vba 属性是指 vba 对象所具有的特点,比如说我们刚才讲对象的时候,比如说讲鼠标的时候,鼠标它的特点,比如说它的形状, 它的颜色就是特点。那 v b a v b a 对象表示某个对象属性呢?是对象点儿属性等于属性值,就是什么意思呢?比如说啊, 比如说,比如说,比如说,比如说单格 a 一,单格 a 一,我们在单格讲对象的单格对,比如 a 一 a 的值等于一千二, 那么这就是 v b a 对象点儿属性等于属性值,单格 a 一点儿属性 等于一千二,就是当格的值,当格的字体,当格的颜色都带的,那么这个的在汉语中啊,它是定语,它是呃,它是来修饰主语和宾语啊, 它和,它和,就是汉语中的 do 是差不多,但可 do 颜色工作表, do 名字,比如说 shit 是三呐 的名字标签,比如说啊,我们运行看一下,就是把这个,把这个第三张工作部啊取名为标签,我运行看一下,还是 test test 一啊,运行看一下, 那么就是标签,就是第三张工作部个名字等于标签对象点属性等于属性值。 我们再来看单格,比如说单格 a 一 a 一 a 一的背景颜色, 我们来运行看一下,他是红色的,那么就是这个是单格的背景颜色,那么这个是,这个是内部,那么这个就是单格。单格 a e 的从属对象,这个是单格 a e 的从属对象。 红色,因为为什么?因为单格啊,不仅仅呃有背景颜色,比如说他还有字体,那么单格,比如说我们写单格的字体,这个单格 a 一 a 一的字体,字体是放的, 放着点扣了,这个是等上,那么这就是字体的颜色,那单格还有边框,单格的边框,单格的字体,单格格的颜色, 你不能直接把这个去掉,把这两个去掉,跟我们想象中的不一样啊,你要是把它去掉,去掉之后啊,那么这个单格他就迷糊了,那你是让我填充单格的背景颜色还是字体颜色呢?还是边框颜色呢? 这跟我们想象中的还不一样啊, 比如说写的是我的工作表 单格 a 一等于 a, b, c, d, f, g, 那么这个就是我的工作表的 a 一的值,这个值 a, b, c, d, e, f, g 是我的工作表啊,是我的工作表 图空表。 a 一等于 a, b, c, d, e, f, g。 运行看一下,那么这个就是相当是只在我的工作表中的 a, e 等于 a, b, c, d, 不是其他的,不是其他的。呃,工作表里面的 a, e 等于 a, b, c, d, e, f, g 啊, 而实际上不仅仅对象,对象的特点,作为对象的属性啊,对象的子对象啊,也属 对象的属性,因为我的工作表的单格 a 一就是我的,我的工作表的 a 一中的值等于 a, b, c, d, f 几啊, 那么这个是 vba 属性。我们再来看一下 vba 方法, vba 方法是指对象可以执行的一个动作,可以执行的一个动作,比如说啊,比如说删除工作表,新建工作表,它是一个动作,它不是,它不是特点,它是动作, 这和属性不一样嘛,就是就表示某个方法作用于 vba 对象之上,可以下表示方法就是对下点方法参数名称,点参数值。 比如说这个把 a, e 复制到 g 三,把 a, e 啊,比如说把 a, e 复制到 g 三,复制到这这里来,那么这就是个动作, 它是对向点方法,参数名称冒号点参数池,它是把 a, e 复制到,这是区域,复制到 g 三,这是 v b 方法, 这和属性有点不一样,就像那种汉语中,比如说我在餐厅吃牛排啊,比如说做牛,比如说牛排啊,牛排。我们做牛排,我们吃牛排的时候,比如说牛排啊做,比如说 熟长度,比如说熟的长度等于一成熟, 成熟啊,牛排做,做牛排,那么牛排熟的程度得七成熟,就这样去理解,就好好理解一些。 那我单格复制,复制到哪里?由于复制啊,由于复制它里面只有一个参数是复制到哪里,因此也可以这样写,也可以像下面这种写法,单格复制到几三,因为他只有一个参数,那么为,呃,为了 为了养成变成好的习惯呢?我们尽量写的时候啊,要把里面的参数写全,那我们在写的时候,哎呀哎,一点出来就看到这个公文包,那么公文包就是方法,那么这个手指啊, 拿着一个手,拿着一张纸,就是他的属性,公包是方法,这个是属性, 这是 vba 属性和方法。那本节课主要内容啊就已经讲完了,现在我们来回顾一下。 第一个是 vba 过程,那么 vba 过程呢?它是什么开什么开什么开,开头的就是它给它取名字,那么代码是放在哪里的? 那么 vba 对象,要知道工作部工作表单格是怎么写的。那么守信方法,大家知道什么是守信,什么是方法?那么守信呢?是所具有的特点,那方法是可以 执行的一个动作,然后大家下去要多练呐。在这里我们举两个例子,比如说我们在单格 a 一到 h 中啊,呃,说打勾,比如说就叫打勾啊,比如说打勾 a, 单格 a 一 a 一 b a 十啊,那 a 一 b a 十,那么它的的值等于等于勾啊, 那么我们来运行看一下,那么单格 a e 到 a s 等于勾横码打勾之前,那么这就是勾,那么这个这个下去下去要多练呢?就是这个比较重要,对象,对象和属 对象。首先方法比较重要,大家需要去多练呢,比如,比如说啊,我们把单元格复制啊,复制单元格就复制单元格回车键,比如把 a e a e 比 h a b h 再直点 copy, 我们复制到,我们复制到这第一吧,复制到第一这里复制到第一, 这是 a b 方法复制到第一用复制到这里 运行看一下, 然后就复制到这里复制复制到这里了,那么这个首先有方法,大家下去, 呃,要多写,包括这个对象啊,多去多去写,那本节课就啊讲到这里,谢谢大家。

提升这个优化效率怎么办呢啊?可以用变量来承载,比如说哈,我们可以什么 set 一个 r r n g, 是 吧?设定一个区域让它等于什么?直接等于一个 f 十到什么 f 十九,直接设定这个区域,然后呢?哈?直接什么 area? 点 insert area, 看到没 啊?直接这边上去直接复制这两行的,无非让它什么用一个对象变量去代替这样一个实际对象,看到没有啊?这样的运行效率啊,要高于上面这种。

这是三十天 bba 教程的第三天,在前两天了解了 bba 界面并录制了第一个红之后,今天我们将深入理解 bba 的 核心逻辑,对象模型如果把 excel 比作一座大厦, vba 就是 带你进入每个房间的钥匙。第三天认识对象模型如果把 excel 世界看作一个由不同零件组成的精密机器, vba 就是 用来控制这些零件的语言, 这个语言体系的核心就是对象模型。一、核心理论祖孙三代的结构 vba 的 世界是严格分级的, 你必须先找到爷爷才能找到孙子。这个层级结构如下, application gives workbooks gives work sheets gives range 就 像你要打开抽屉必须先找到房间一样, vb a 也需要通过完整的路径来定位。二、核心代码实战 ms g box ms g box 是 vba 里的消息对话框,也是你与代码沟通的窗口作用,弹出一个提示框显示信息,或者等待用户点击按钮并返回结果。 简单用法, ms q 的 box 内容三,今日代码练习请在 vba 编辑器中插入一个模块儿, 然后输入以下代码并按下 f 五键运行。练习一,按层级访问对象 vba sub 认识层级结构完整写法,从 application 到 range application workbooks 工作不一 x o s m worksheet range dot value equals hello vba 偷懒写法,默认操作当前活动的工作簿和工作表, range value 等于我也被复制了。弹窗显示我们写入的内容, amskeybox a 一、 单元格的内容是 l u u e 单元句 and sup 练习二,引用工作表的多种方式 vba sup 认识工作表 dimws s worksheet 声明一个变量用来存放工作表。 方法一,按名称引用 set w s 等于 work sheets y s range 等于通过名称引用。方法二,按序号引用注意左边第一个 sheet 是 一、不管 sheet 的 名字叫什么, work sheets 点 range 等于通过序号引用。方法三,使用 code name shift evange 等于通过 code name 引用 m s, b x 请在 b 列查看三种引用方式, n sub 练习三, m s g box 的 进阶用法, vba sub 和 vba 对 话点答案, svb mask result 定义一个变量来存储用户点击的结果,显示一个带问号图标和有是否按钮的对话框。答案等于 maskbox。 今天你学会对象模型了吗? v b question 加 v b s no 第三天提问,根据用户的选择做出不同反应 if 答案等于 v b s 但 i'm streetbox 恭喜你,明天继续加油! vp information 太棒了! else mescal boss 没关系,再看一遍教程或者休息一下再来。 vv exclamation 别灰心 and if and sup。 四、知识点解析 application 最顶层,代表整个 excel 程序,除非需要设置全局属性,如 application screen updating 等于 false, 否则通常可以省略。 workbooks 工作簿集合 如果你有多个 excel 文件同时打开,需要指定操作哪个 worksheet 工作表集合与 sheet 不 同, worksheet 只包含常规工作表,而 sheet 包含图表页 range、 单元格或单元格区域,这是你最常用的对象等号。在 vba 中,等号通常表示赋值。 range 等于一百,意味着把一百放进 a 一 单元格 set 关键字, 当要把一个对象赋值给变量时,必须使用 set, 普通值则不用五。今日作业一,打开你的 excel, 在 sheet 一 的 a 一 到 a 五分别输入数字一到五二、编写一个 sub 过程。使用 messbox 弹窗分别显示 a 一 和 a 五的内容。 三、挑战题通过 vba 代码将 sheet 一 的名字修改为三十天 bba 挑战,点击查看挑战题答案修改当前工作簿中 sheet 一 的名字 worksheet name 等于三十天 vba 挑战 ms g box 表明已修改 ends up 六、今日小节 vba 的 世界是按层级排列的, application gives workbooks, gives worksheet, gives range。 绝大多数日常操作都在 worksheet 和 range 这两个层级上。 mscops 是 你学习路上的好帮手,既可以用来显示信息,也可以用来接受用户的简单指令。明天我们将学习 vba 语法基础变量,帮你理解如何在代码中存储和计算数据。

哈喽,大家好,我是听今天呢,我们来跳出实践的,来讲一下 vba 中非常重要的三个概念,他的对象,方法和属性。那么这个在后面的实践中呢,我们会经常会使用到,所以呢我觉得花个几分钟时间,我们快速的理解一下还是非常有必要的, 那么离别中呢,会有上百个对象,我们这边的举比较常用对象,我们举例的是单元格,工作表和工作部, 那么他的对象呢,就会有对应的属性和方法,在这个日常生活中呢,手机就是一个对象,那么什么是属性?比如说手机的内存,手机的杀菌力,这些呢,都是他的属性,那么属性呢更偏向于是一个名词,比如说单元格的值,地址,单元格的颜色,这些都是他的属性。那么单元格的一些方法什么呢?比如说我选择这个单元格 一个动作,那么基本上就是个方法,比如说我删除这个单元格也是个动作,我要清除单元格内容,也是一个动作。好,那么工作表呢? 比如他的名字,那这个工作步骤有多少个工作表这些呢?都是一些名词呢,都是一些属性,那我要新建议工作表,或者选择某一个工作表再进一步操作呢,就是个方法。那么接着呢,我们就用一些代码来很好的理解一下。 好,我们点击这个工作表一,我们来查看一下代码。好,我们选中,我们现在打开这个工作表,然后呢我们插入一个模块。 好,插入模块之后,我们输入一个扫把 tix 的,直接点击一下回车键,基本上他就会自动的填充完剩下的部分。好,我们来看一下啊,我们先用一个 mact box, 我们输出一下我们某一个单元格的一个属性, c 三单元格属性,我们用乱卷调用 c 三单元格他的地址吧, 那么这个我把这个放大镜了过来,我们选择一下他这个地址,就是这个地址。好,我们来运行一下,看看 第一步,第二步,第三步。哎,他地址就 c 三这个单元格,这呢就是他的一个属性,我们也可以输入出他的这个值,我们试一下。 好,他的指甲就是 a a, 那么这个呢就是属性,我们呢再来试一下,比如说我们要做一个动作,我们选中某一个单元格,那么这个动作呢,就不能用这个输出了,我们可以选中他,好,我们来选中一下输出,按一下 f 八继续执行。 好,这样呢我们就选中了这个单元格,那么我们考一下,如果说我想把这个单元格内容删除掉呢,这个也是一个方法,对不对?那我们 输入一下,把放大镜拿过来。好,那我们输入下这个方法呢是可列,那么一般情况下呢,你也不需要背出所有的这些方法,基本上呢你大概的找一下呢,基本上都能找到的,比如说我们现在是要删除这个内容,就是慷慨的这个单词,好,我们来试一下。 好,这个内容呢就被删除掉了,那么这个呢,就是我们这个单元格的一个方法和属性,也都是比较简单的。那么调用单元格的方法呢?我们讲到过这个乱九 cs, 比如说这个中括号,我们都讲过,那么还有一种呢,这个 xxl 呢,就是一个活动单元格,就是我们可以动态的改变,而不是一个固定在某个地方的。我们来看一下, 我们输出一下这个 mactbox, 我们输出一下这个 x, s, l, d, igs, 我们输出一下活动 单元格的地址,现在我选择的是 c 八单元格,我们运行一下,好输出 c 八,那我如果说我这时候运行在这里了,那我们再来运行一下这个红, 他说出就是 c 五这个单元格,那么这个呢就是活动单元格,我们在后面呢也经常会使用到这种调研方法,那么另外呢,比如说赛拉克逊,赛拉克逊呢也是对单元格,但他是一个选中一个批量的一个范围,那么这些方法呢,我们在后面中呢经常会使用到,我们来看看工作表, 那首先我们调用这个工作表呢,一般有三种方法,第一种方法,我们输入一个穴子之后呢使用这个双引号,然后呢输入他这个工作表的名称,系统报表,比如说 好,我们可以输出他什么呢?输出他的名字,我们试一下,好,我们来运行看一看, 叫系统报表,那么这个呢没多大意思,但是呢我们只是为了表示一下这个使用方法,那么另一种方法呢,我们不用这种双引号的名字,我们可以使用输入一个二,那么这个二的方法就是我们这边的第几个工作表,现在系统报表呢,在我们这边的第二工作表,我们来运行一下, 哎,他也叫系统报表,对不对?第二个工作表,那么还有种方法呢,我们来看一下,直接输入一个系统,然后面呢加一个二,这样也是可以的,我们来看一下 也是系统报表,那么这个有什么区别呢?我们来看一下,如果说我这边在插入几个工作表,我这边在新增几个工作表, 好,那么我们来打开这个看一下,我们这边看一下,我们这边的话叫写的一和二,那后面这个呢叫写的六和写的七。好,那么在这里呢,我们来比较一下两种方 法的区别,我们把这个复制一下,这里呢我们有前面种方法,那我们这两种方法都输了之后呢,我们看看他结果有什么不一样的。 好,我们现在运行一下看看,现在二点零好是系统爆表,他的名字呢叫系统爆表, 然后呢我们再运行第二个序词里面的第二个他名字叫序的是,那你可以看到是什么区别了?如果说是这种输出方法,那么是他的系统的一个排列序的二呢是一个系统报表, 那么如果说是写的二在一个小括号里面的,那么这个呢就是指他的第二张报表 最大输出的名字呢,就是叙特四这个名字。那一般情况下我们使用比较多呢,还是使用这种方法呢?会更加的多一点,当然了如果不同的场景可能都会不一样,那么这个呢是工作表,工作表 我们再来介绍方法,比如说我要新建一个工作表,那我们可以用这种方法序词,我如果我们单单使用这个序词,他是一个工作表集合,集合之后呢,我们可以用这个 add, 就是艾特我们新增一个工作表,我们来运行这个方法看看, 好,他就新增了一个 s 六的这个工作表结束。好,那么我们接着再来看一看,如果我们要如何得到这个工作部中有多少工作表,我们只要使用这个亢的就可以了,但这样的是不能执行的,对不对?因为我们不能直接就使用的属性,什么都不操作,我们可以使用一个 mac 去 box。 好,我们再运行一下。哎,有个工作表,下面呢总共有个工作表。好,那么接着呢,我们再来看一下工作部,工作部呢也是我们在后面的时间中呢,会经常使用到的,比如说我们要在不同的工作部之间复 粘贴,然后呢不同工作部之间切换,那么都会使用到工作部的一些方法,比如说激活啊,新建。那么如何调取某个工作部呢?我们一般使用这个双引号,我们看一下啊, 我们现在这个名字呢,叫做对象方法属性,这个呢比较长,我们来复制一下。好,现在呢我们输入这个名字。 好,那我们要做什么呢?我们来看看他的路径在哪里?我们说了一个 pass, pass, 就他路径,我们运行一下,那这里呢是少了一个 k。 好,再运行一下,这就是我们现在这个工作部的这个路径,这位置在什么地方?好,那我们再来,比如说我们激活一个新的工作部,那现在我们这个激活的工作部 是对象方法属性,这个工作部,我们来激活另外一个工作部。 我们说一下这个名字,那在这里呢,我还打开了一个工作部的名字呢,叫一一 点 xl s, 那接着呢调用一下激活的方法, 然后呢如果说他被激活之后,我们再来改一下他的值,接着呢我们把身上的这个值呢改一下, 我们用一个复制号,我们复制一个几个 x 吧,然后呢你们想一下,我现在是激活了这个工作部,但是呢我们在这个红中呢,我们激活了另外工作部,并且把那个工作部中的乱群改改成那个纸,我们来运行一下看看, 好运行结束,我们看看这个工作部,就是我们刚开始激活工作部呢,他的职业并没有发生变化,然后呢我们打开第一者工作部,我们看一下他被激活之后,并且把他这个乱军的这个直男 c 三这个单元格改成了几个 x, 那同样的呢,我们如果使用沃克 box 加 s 呢,就是所有的工作部这个集合,我们也可以使用这爱的新建工作部,我们运行一下,好,这时这个呢就是我们刚刚新建出来的这个工作部, 那么我们想一下,如果说我把这个工作布关掉,这也是个方法,那我们可以用这个 xtel, 我们可以使用 xtvook book 点可陋丝这个方法, 那这个语句呢,就说他会新建一个工作部,并且把这个新建的工作部呢,因为新建之后他就不会被激活,然后就把这个激活的工作部呢 关闭掉,我们看一下,好,这时候他新建工作部二,然后呢又把它给关闭掉了,结束了。 好,那么这一节呢,我们就讲到这里,我们要了解什么是对象,什么是属性,什么是方法,那么这些对象方法和属性的我们都会在后面的实践中呢多次使用到, 那么现在呢,只要有一个初步的概念就可以了,但是呢,你只要理解这个原理,你想使用什么属性方法呢?一般情况下网上查找一下呢,都是可以直接查找出来的,也是非常简单的。好,那我们这一讲,讲到这里,谢谢观看,我们下期再见。

上节课,我们掌握了 dowell 循环的安全删除技巧,程序已经能够应对动态变化的数据了,但如果想实现更复杂的操作,比如跨工作表汇总、数据控制、 excel 程序最小化修改报表样式这些的单兵作战指令,比如写 sales 一 逗号一就显得力不从心了。 这时候我们需要有一种更系统、更结构化的思维,也就是面向对象编程,它能让你站在更高维度上理解 excel 的 组成,精准控制每个部件进行干活。今天我们就来揭开它的神秘面纱。首先从一个游戏说起,什么是面向对象呢?面向对象听起来高深, 核心思想其实很简单,首先,编程时先明确你要管理的世界里有哪些东西,每个东西长什么样子,能干什么,再用这些东西搭建系统,也就是类 属性方法的概念。类是事物的抽象种类或蓝图,属性是该事物的特征或数据, 方法是该事物能够执行的动作。我们通过类属性方法构建数字世界,让代码更加贴近现实逻辑,使其更加易于扩展和维护。我们用一个战斗游戏进行理解, 先定义世界里的种类。编程里叫做类,这里有战士类的属性,有姓名、生命值。怪物类的属性有生命值、 攻击力。武器类的属性有名称和伤害值。同样,每个类有不同的动作,我们称之为方法。战士类有攻击、防御、 疗伤动作,也就是方法。怪物类有攻击、咆哮、逃跑动作,同样是方法。武器类有装备 损耗、修复的动作,也同样是方法。而面向对象就是根据这个类的模具创造出具体的实力,比如通过战士类模具塑造出一个具体对象, 姓名叫做张三,生命值为一百,攻击力为二十的战士。通过武器类模具创造出一个具体对象,性,名为铁剑, 伤害值十五,耐九度一百的武器。做一个简单的比喻类,就像月饼的模具,规定月饼是圆形带花纹,而对象就是用模具压出的具体月饼,无论是豆沙线、五轮线 都符合模具规则。程序运行的本质就是创建一个个对象,给它们的属性赋值,并调用它们的方法让程序动起来。而 excel 的 游戏世界也为你搭建好了这个世界的核心类, 不需要你从头设计,你只需要直接使用这些功能强大的类。核心类有 application、 workbook、 worksheet 和 render 类,分别对应着 excel 中的 excel 程序本身、 excel 文件、 工作表和单元格以及单元格区域。它们的主要作用分别为,控制窗口、权限设置、打开、关闭文件管理工作表、操作工作表、数据修改表明读写数据、设置格式。下面讲解 excel 里的存储关系,也就是对象的组织原则。这些对象不是散乱的, 而是大核套小核的从属关系,就像收纳系统。 application, 也就是 excel 程序,包含 workbooks 集合,也就是所有打开的 excel 文件。比如同时打开了销售数据和员工名单工作部,那么 workbooks 集合里就有两个 workbook 对 象, 而 workbook 对 象中包含 worksheet 集合,也就是文件里的所有工作表,比如销售数据表里有一月二月汇总这几张表,那 worksheet 集合里就有三个 worksheet 对 象,而 worksheet 包含海量的 range 对 象,比如 g t 一 a 一 单元格, b 二 d 五区域都是 range 对 象。理解层次结构是实现精准操作的关键, 如同按地址寻找文件,简单的关系列 application workbooks 集合某个 workbook work sheets 集合某个 work sheets indent。 对 象核心总结与下节预告今天我们掌握了面向对象的核心概念。类是事物的抽象蓝图, 如工作表、工作簿。对象是根据蓝图创建的具体实力,如 sheet 一 属性是对象的特征,比如工作表的名称、单元格的值,方法是对象的动作,比如工作表的删除、工作簿的保存等。我们同时又认识了 excel vba 中最常用的四个类, 以及他们的董属关系。很多同学可能就会想到,理懂了,但代码怎么写?别着急,面向对象是一种思维方式。下节课我们就把概念落地,聚焦 worksheet 与 workbooks 类,学习如何使用代码,抓住具体的工作表、工作布, 实现跨表数据汇总、批量创建工作表等实用操作。从纸上谈兵到真枪实弹,只差一节课的距离。下节课代码里见。

大家好,我是老金,我们在工作中会遇到需要记录一个单元格数据的变化,比如说我这里三十,他就记录了我的修改时间,修改我的三十,当我改成六十, 他同样也会记录下来,那这个怎么做?点个赞,我们进入我们的教学,我们首先打开开发工具,点击录制红,确定随便选一个单元格, shift 加 f 二, 新建一个注视,然后在里面随便的编辑一下,我们稍微把方框调整一下,确定点一下其他单元格,停止录制。我们来到 vba 编辑窗口,这里就是我们刚刚得到的代码,我们把它复制一下,我们 需要在这个工作表里面起作用,双击它,然后点 workset, 在这里点一下,有个春季时间,这里可以不要,我们把刚刚的代码粘贴进来,然后把这个 tiget 复制一下,选中, 按 ctrl 加 h, 把这个内容替换成 target, 全部替换确定。我们来检查一下什么 selection 的不要, selection 的不要,这个也不要, 这个就跟我们工作表的需求是差不多的,我们用原本的这个内容复制,连上 f o r m i t 反括号 n o w ro 当前时间,它的显 四格四为 yyym, 比例修改为注视前面的内容,连接上一个回车,回车符应该放在这里,连上当前的日息,修改为一十五,一十五应该是一个变动的, 就是当前单元格 tax 点 v 六,这就是我们内容。接下来这个是调整窗口的大小,那我们也可以 selection 是当前选中,那我们把这个也再复制一下,把它替换 它,这个是在设置它的高度,其实我们直接设置也是可以的,复制一下它的单词,它的宽度我们设置为一百五, 他的高度我们设置为二百四十,整个这样就差不多了。但有个问题,我们是只需要在激烈这里起作用, 那我们在前面做一个判断, ftl gt 点叉了等于七,那么就执行下方的代码,否则 就结束。还有一个问题,我们现在对当前单元格进行一个新建注数的动作,但如果原本单元格就有注视,那这个会起冲突,那我们其实可以在前面加一句, 加上这一句,他就是说如果出错了还是进入下一步,如果我不能新建, 我就进入下方这里,这个就是整个代码,需要的可以在粉丝群来领取。我们现在再来操作一下,我们在这输入三二十就改为二十,输入三十修改为三十,那输入四十,整个 功能就做到了。然后我们需要保存的时候,我们文件另存,另存为启用红的工作部,也就是 xlsm 格式的文件保存,这样我们的代码就会起到一个作用。



cba 零基础也能用的六行神奇代码?让你根据所选区域快速新建工作表,快来看一下吧!这个方法是根据所选区域的数据新建工作表的。第一步,全选数据区域,奥特加 f 十一调用 cba 编辑器, 点击插入模块,在右边代码区域输入 sub 空格,随便取个过程名,回车两行代码就这么完成输入了。接下去输入三四两行,也就是 for each next 循环结构,输入 for h b in selection selection 就是所选单元格区域的意思。回车输入 next, 又写完两行代码了,接下去就是实际操作过程了,回车缩进美化代码结构。接下去就是添加工作表,并且以单元格内容命名工作表,输入 walkshit, 点 ad 新建工作表,输入 aktev 写的点 name 等于 b 点 tax。 意思是新建工作表明自以单元格内容命名。六行代码输入完成,我们运行试试看吧! 现在这里只有一个工作表,点击菜单蓝绿色三角运行程序。别眨眼看这里工作表在眨眼间就建好了!想做牛肉粉丝汤,可是粉丝不够,加个关注呗!

vba 怎么读取单元格的内容?我们要读取单元格 a 二的内容,首先点击开发工具,点击 vivo basic, 进入到 vba 编辑窗口,接着写入代码 sub 空格读取内容 按回车。在 vba 里 sub 是一个过程的开始,或者叫可执行过程,在 excel 里我们也会把这个过程叫做红,所以 sub 读取内容是指一个名称为读取内容的红。 下面这个 and sub 是一个过程的结尾,也可以理解为这个红直行到这里就结束了, 我们的代码就是写在这个红的中间,我们接着写代码 range, 小括号,双引号 ar。 这个 range 在 vba 里是一个对象表格里的一个单元格,后面括号和双引号里面的 a 二指的是单元格 a 二, 也就是我们要读取内容的对象,现在我们要读取内容的对象已经写出来,接着我们就要考虑读取到的这个内容要放到哪里去。我们可以把读取出来的这个内容放到任何可以显示文本的空间或对象里。我们要把读取到的内容放到第二单元格去,我们可以在代码前面写上第二单元格的代码 range 第二。现在两个单元格代码都写出来了,我们还需要在中间填上一个等号。 vba 内容复制普遍都是用等号, 现在代码写好了,我们回到 excel 表格里,点击开发工具,再点插入, 再点一下按钮空键,给表格添加一个按钮,接着选择一个红,我们选刚才写好代码名称为读取内容的红,然后按确定。 现在我们点击一下按钮, a 二单元格的内容就被读取到第二过来了。

大家好,我是老吴,欢迎观看 excel vba 入门开窍课程。上节课我们用这个按的定位这个数据的边界, 然后配合这个肉和这个卡棱,获取到边界的列号和行号。那这节课呢,我们就要学习一个他们的附属形式,也就是肉字和这个卡棱式,那他们两者有什么区别呢?我们先来看一下这个, 这个肉呢,他是返回单元格所在的行号,如果是区域,就返回这个区域的首行的行号啊,他是这个单元格的一个属性 哦,我们可以通过代码来看一下。好,首先呢,我输入一个单元格, b 五, ok, b 五的行号就是点肉,然后呢,我们用这个 ms 去 box 把它弹出来,然后看一下,好, b 五的行号是五,那显然是五了, b 五就是这个单元格,他的行号是五,然后这个没错, 好,然后这个如果是区域的话,他就返回这个区域的首行啊,比如说是 b 五到 c 十啊,这个地方,也就是 b 五是这个地方, c 十啊,就是这个区域。这个肉呢,也是返回这个首行的行号。看一下啊,就这样, 比如说这边改成 b 六到 c 十啊,他还是返回这个首行的行行。好。现在呢,我们就来看一下这个 rose, 他是怎么了? 做肉食呢?它是代表一个行的集合啊,返回的是一个单元格对象啊,他返回的不是一个数字,他是一个对象,如果我输入这个肉食呢,这个就代表所有的行 好,如果我对所有的行进行选择呢,我就可以直接这个 roose, 然后点这个啊,史莱克称啊,来试一下, 他就选中了所有的行, ok, 也可以单独表示, 比如说我输入这个肉,是呢啊,括号里面写个一,然后斯拉给他 好看一下会有什么反应,好,他就选中了这个第一行, 整行啊,全部选中了,那这个肉是然后括号一呢?他这个怎么理解啊?就是说这个行的集合也就代表这个工作表的所有的行啊,其中的啊,第一行这个写法呢,就像我们之前学习过啊,对象那一刻里面 我们表达一个工作表的时候呢,我们可以这样表达谢的字啊,这也是代表工作表的一个集合啊,在这个工作表集合里面我们找到第一个工作表啊,对他进,然后呢把他的名字啊改成幺幺幺啊,就其实 这个的意思啊,跟这个表达的意思是一样的啊,只不过一个是在行的集合里面找到第一行啊,选择他,然后呢这个是在工作表的集合里面把他的名字改 成幺幺幺啊,这个肉字呢,他还可以选择啊,同时选择几行啊?比如说我选择一到十行, 好,来看一下,好,他就选中了一到十行,但是这个肉字呢,他选择的这个一到十行,他是有一个区域的。好,如果我们没有在前面加上任何的区域, 嗯,他就是默认,就是说我在这个工作表里面从第一行选择到第十行,如果我在前面加上一个区域的话,啊,他就会改变啊,比如说我换到这张表里面来, 好,我在前面呢,呃,加上,比如说我加上一个认字, 选择一个区域。好,这个区域呢,我就选择从 a 五到一十啊,这个区域啊,我们先不选择这个这么多,行吧,我们先选择一行。好,我们来看一下, 好,一行呢,他就选中了这个 a 五到一十的这个首行啊,也就是这个区域的一个首行, 如果我们不加这个前面的东西呢?比如说我现在把它删掉啊,然后我们再选择一下啊,他就选择这个工作表的这个第一行。好,我加上这个呢啊, 他就会啊,相对这个区域而言的第一行,那他就选中这个地方,如果把这个区域啊改成这个 a 六到一十,也就是 a 六到一十,就 这个区啊,这个区的第一行,那肯定就会选中这一行了 啊,他就选中了这一行。好,我们再来测试一下,比如说这个 a 六到一十呢,他是这个区域 a 六到一十 啊,他总共有一二三四五啊,总共有五行,如果我这肉是里面呢,填入第六行会是个怎样的状态啊?已经超出了这个区域。 来看一下,再来选一下,他不会因为你选中了这一块区域呢,他超出了他就爆错, 他依然会根据这个首行啊往下数,从这个 a 六的这个六行往下数啊,再数六啊,一二三四五六啊,然后选中 这个区域。 ok, 我们再来看一下,我们平常用的比较多的话,我们会用这个 roose, 然后点这个 call 啊,这什么意思呢? call, 如果我们学过函数,我们知道这是一个技术 啊,我们这么写呢,就是肉是点 cant 呢,就是代表我们要获取到这个最大的行号,然后同样的这个卡顿式呢,然后点这个 comt, 就是获取到最大的列号 啊,最大的行号是什么意思呢?比如说我在这个空白单元格,然后按住 ctrl 键向下啊,他就会定位到这个一百多万行,那我们快速的获取这个行号呢,我们就可以 直接这么写啊,因为他是个集合吗?在这个集合里面我统计啊他 数量,然后怎么样呢?比如说我可以把它用这个下去光把它弹出来,然后看一下啊,这就是这个工作表最大的一个行号, ok, 好,同样的道理呢,我们可以让他返回最大的列号, 好,看一下这最大的行哈,好,最大列号呢,就是一万六千三百八十四列, 我们再把这个我们讲的这个肉食和这个咖冷呢啊,结合我们上节课学习的知识呢,我们再来理解一下。好,比如说我定位这个 a 一单元格,然后呢?嗯的啊, xl 档啊,就是往下定位他的边界。 好,然后呢我们再获取到他的行号, ok, 然后我们再用这个 max 去 boos 呢,把它弹出来, ok, 他就弹出十七啊,是因为从这个地方呢往下定位他的边界孔雀向下啊,他就定位到这个单元格,那这个单元格呢?他的行号是十七, 也就是我们刚刚我们学过的啊,他是返回这个单元格所在的行号,然后我们把这个代码改成肉食,同样代码我们只是改变了一个字母啊,把它改成一个肉食,可以来试一下。 好,他就返回了这个万超啊,他返回了这个单元格的内容,为了更好的演示这个我们返回的四个单元格呢,我们还可以再一次的再获取 到他的行号,嗯,比如说继续获取他的行号啊,他又可以因为你返回的是一个单元格,然后我再用这个单元格里面的属性,这个肉呢再返回他的行号,我可以把它进行。怎么样呢?我可以把它复制一下 啊,阔屏,然后呢把它复制到什么地方去?比如说我复制到这个 k 一单元格啊,然后把这个 mac 去去掉,我通过 a 一向下定位他的边界, 然后获取到这个最后面这个边界的这个单元格,再把这个单元格复制到这个 k 一 来试一下,好,他就复制过来了。好,这就是关于这个肉和这个肉子的这个区别,这个咖冷呢和这个咖冷食也是 同样的道理。我们这节课学习的东西呢,是为下节课学习打下基础。好了,这节课呢就讲到这里,感谢各位看官的支持,你的点赞是我继续创作的动力,关注我,下节课我们将学习新的内容。