第五课 代码的录入方式和保存方式(整理版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五讲代码的录入方式和保存方式
本节课程重点:
●了解代码应该放在哪里,如何输入,如何保存
●学习代码如何编写,以及它的语法
第一点讲过程的分类
上一课已讲到,一段VBA程序就是一个过程,所以以后要注意,说过程就是程序,而不是我们生活中所讲的“过程”,例如录一个宏,它产生的代码就是一个子过程,也称Sub过程,也可以称之为宏过程。

当然最书面化的称谓是子过程。

VBA的过程包括三类:
子过程是最常用的占所有过程的80%以上,子过程以Sub开头,End Sub结尾。

我们天天见到宏都是子过程,Sub 和end Sub是它的外壳,可以理解为包装袋,有价值的东西都在袋内。

为什么称之为子过程呢?
因为Sub过程常作为其它过程的子过程调用
例如
sub a()
msgbox "I Love VBA"
end sub
sub b()
call a
end sub
大家可以使用Alt+F11打开VBE,然后插入一个模块,粘贴以下代码然后单击激活过程b,然后按F5键,此时看到的是过程a的执行结果,也就是说过程a是过程b的子过程。

过程b调用过程a来实现某些功能,当然函数过程也可以作为子过程调用,更是Sub过程使用更频繁,所以将子定程绑定到了Sub过程身上,所有录制宏产生的过程全是子过程。

不可能录制其它过程,子过程以外用得多的是函数过程。

函数过程以Function开头,以end function结尾。

也就是我们常说的自定义函数。

自定义函数属于VBA的综合应用,所以等到近30课后才能讲。

没有一定的基本功是无法做好自定义函数的
第三类是属性过程,以Property开头,这类过程基本不用。

我们的课程主要针对前两类过程。

在子过程中其实还有一类分枝----事件过程。

事件过程是很特别的一类过程。

初学者很难懂,帮助中对于事件二字的解释也是相当不通俗化。

所以要从概念上明白事件过程是怎么回事对新手而言并不简单,所以,我们可以从另一个方向下手。

根据事件的功能和存放地址来理解,等一下在后面后讲到现在先说说过程代码的三种录入方式
其一是“插入”-“过程”。

请大家先在VBE中插入一个模块:
你只要指定一个过程名称就行了,然后要下面选择子程序
然后单击“确定”,一个子过程就产生了。

Public Sub 我的宏()
End Sub
这是程序的外壳,你可以随心所欲地在其中添加操作命令,这种方法对于新手而言很方便、快捷。

第二种方法就是手工录入,其实只要输入sub加过程名称就行了,其余的VBA自动完成,输入sub ABC,然后回车就行了,括号加end Sub都全自动完成,所以手工录入过程的外壳也一样的简单第三种方法是借助录制宏实现,因为平常编程其实多数时候需要录制宏,然后改代码,所以索兴就直接通过录制产生代码了。

以上三种没有高下之分,大家自行选择。

最麻烦的是事件过程,现在回到事件上来。

VBA有很多事件,控件、窗体、图表、工作表、工作簿、Excel
应用程序等都支持事件,而对于初学者而言,主要涉及事件的对象就两个,其它的以后再谈,先谈这两个对名胜的事件----工作表对象和
工作簿对象。

我们常接触的事件就是工作表事件和工作簿事件,其它事件要么不常用,要么是等你到了高级用户后才用,所以初学者可以通过工作表事件和工作簿事件来了解事件。

通常,事件一定涉及一个对象和一个对象的动作,对象和动作加起来形成一个事件,而其中的对象和动作是由微软预先定义的例如工作表的激活事件:
Private Sub Worksheet_Activate()
End Sub
对象是工作表Worksheet,动作是Activate。

所以指定对象的某
些指定动作被微软定义为事件,而其它的一些动作没有赋予事件。

所以在这种前提下不能简单的定义事件是什么,或者有什么规律,最简单的办法是将帮助中的查看帮助获知Excel的某个对象支持哪些事件。

请大家按F1键打开帮助,搜索关键字“Worksheet 对象事件”。

单击第一项即可
这里是工作表对象所支持的所有事件列表,单击其中一项就看到微软对该事件的详细描述。

工作表事件并不多,但是加上工作簿事件就多了,上面的这个帮助界面其实不太利于观察。

大家可以换一个关键字,“Worksheet 对象成员”,然后单击第一项,请拉到最下面。

这里是所有事件的名称和解释,能同时看到,对于理解有帮助,当然也利于打印,大家可以打印出来。

由于工作表有很多动作,例如复制、插入、激活之类动作,但是只有部分动作可以形成事件,这些动作由微软定义的,也没有规律,记忆不容易,所以打印出来,要用时核对一下就行了。

例如我是一个新手,我想知道工作表没有有重命名事件,看一下这张表就明白了。

虽然是新手,其实就10多秒钟就明白了,既不用记什么,也不要学习多高深的技术才能解决这个问题。

简单地说,工作表的事件就是在工作表的某个预先定义的操作时,可以自动执行用户指定的命令,对象和动作由微软定义的,但是事件发生时要调用的命令却是我们自己指定的。

例如我想实现切换到工作表sheet3时弹出一个问候的窗口,由于是自动的(切换工作表时自动弹出信息)所以需要使用事件,所以有一种简单的理解事件的方法。

也就是事件总是自动执行的,而我们平常编的程序需要手工执行。

所以要判断某项工作是用事件还是不用事件,我们先想想要不要自动执行就行了,先试一下上面的事件。

Private Sub Worksheet_Activate()
MsgBox "你好"
End Sub
工作表激活事件代码如上。

现在的问题是如何输入?
首先由于要求是“切换到工作表sheet3时弹出一个问候的窗口”,所以是代码要写到Sheet3工作表,在工程资源管理器中双击sheet3,请先进入这个界面:
左上方有一个对象窗口
单击列表,选择worksheet
然后再单击右边的过程列表框
右边的这个列表就是事件过程的过挰名称。

右边的这个列表就是事件过程的过挰名称,刚才讲了事件过程由对象和动作组成。


刚才的两个步骤刚好对应
先选择对象 worksheet,表示工作表,然后选择动作。

第一项:Activate()
最后产生的代码如下:
Private Sub Worksheet_Activate()
End Sub
这就是工作事的事件过程。

也就是说事件过程偏于复杂,不要手工输入,而是通过下拉列表选择对象名称和动作,它会自动产生过程的外壳,最后再自己补充代码,MsgBox "你好" 写在中间,录入过程后,可以测试代码了,请按Alt+F11返回工作表界面。

先单击Sheet1,然后单击Sheet3。

当你单击sheet3工作表时程序就自动执行了,所以印证了刚才所讲的事件过程总是自动执行的。

当关联的事件条符合时,全自动执行过程,而不需要手工单击菜单或者按F5执行。

与事件相关的过程就叫事件过程。

事件过程必须放在该对象的代码窗口才生效,在其它地方无效。

上述过程是Sheet3对象的事件过程。

如果将代码放在模块中,过程就没用了,不再有事件的特性。

简单而言,你想要代码自动执行,就用事件过程。

写事件过程之前先想好对象是什么?动作是什么?如果想要手
工执行代码,那么就用普通过程。

事件过程必须放在它所属性的对象中例如Sheet1的事件过程放在Sheet1的代码窗口。

Shee3的事件过程放在Sheet3的代码窗口。

工作簿事件过程必须放在ThisWorkbook窗口。

剩下的自定义函数和子过程放在模块中就行了。

再说说代码的保存方式,保存方式总和文件格式相关联的。

所以先了解文件格式,Excel通用的格式是xls,此格式有Excel 97到2013都通用,所以如果你很在乎文件通用,人人都可以打开,就将文件保存为xls格式。

其次是xlsx格式,这是一种2007开始推行的压缩格式,支持更多的行与列,xlsx文件支持1048576行 16384列,而xls格式只支持65536行 256列。

xlsx文件另一优点是与xls文件同样的内容时将拥有更小和体积,因为它是压缩格式。

另外,xlsx文件不能保存宏代码。

当你保存文件时,如果工作簿中有宏代码,那么宏代码自动消失。

相信大家都看过这个提示,看到这个提示就应该明白两件事:
1.你的工作簿中有宏代码,或者有宏表函数;
2.你选择的文件格式错了。

如果你想要保存你的代码,请重新选择xlsm格式。

那么xlsx不能保存代码,还有优点吗?其实有一个大大的优点:假设你不喜欢VBA,那么请永远使用xlsx格式的文件,因为它自动丢失代码,所以你的电脑永远不会中宏病毒,一切宏病毒都自动消失。

当然,进本群者都需要保存代码,所以请用xlsm格式。

xlsm格式同样是2007增的格式,拥有更多的行与列,能保存代码。

接上面的话题,假设每个文件都保存时都要重新选择一下格式,岂非麻烦?微软已经预先解决了这个问题,请看下图
使用Alt+T+O组合键打开选项对话框,然后调一下格式,以后所有文件自动保存为xlsm格式,一劳永逸。

最后一点,讲解如何保存代码
代码有两种存方式:
一是保存在工作簿中,那么在VBE界面按下Ctrl+S就行了,在保存工作簿的同时,也保存了代码。

二是将代码/模块单独保存。

如下图:
对有代码的模块单击右键,选择导出文件就行了,生成一个模块文件,假设模块中的代码很有价值,以后可以导入模块,直接复制里面的代码应用。

不过,我的建议是,大家平常要注意收集好的代码,放在Word里,而不是模块中。

Word里可以加更多的注释,而且方便查找。

当然和工作簿放在一起也可以,好处是保存代码的同时也保存的对应的数据,以后调用代码时可以预先验证一下代码。

而有些通用的代码是不需要与数据直接关联的,所以没有数据也不会有影响。

总之一句话,平时遇到好的代码要收意收集、分类。

分类是最重要的,而且更重要的是在后面加注释。

否则可能一个月后再遇到这段代码都不知道它的思路或者功能。

好,今天的内容到时结束
主要包括代码放在何处,过程的分类、不同过程的代码的录入方式。

下周三的内容是“认识过程”,开始真正地编程,前5课都是一些边缘化的知识。

当大家具备这些常识后,再开始接触代码会更得心应手。

相关文档
最新文档