|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
ExcelHome VBA初级培训课程-课时3 |
| ||||||||||||
|
从宏开始学习VBA |
| ||||||||||||
| ||||||||||||||
|
讲师: 三戒 2009.12 |
| ||||||||||||
|
整理: Jimmy Zeng 2010.09 |
| ||||||||||||
|
http://club.excelhome.net |
| ||||||||||||
| ||||||||||||||
|
▣ 学习感言 |
| ||||||||||||
|
三戒老师的课程虽然主体纲要是介绍宏,跟ggsmart老师的课件内容有点重复,但更多的内容是介绍宏的运用,而最重要的, |
| ||||||||||||
|
就是向我们介绍怎么活用录制的宏代码,比如说对录制的代码进行精简、增加循环、将之修改为更适合我们实际要求、更高效的指令。 |
| ||||||||||||
|
他告诉我们,录制的宏代码并没有那么“神圣”,并非不可侵犯的,而是在我们充分解读代码所代表的意思之后,我们就可以根据自己实际需要 |
| ||||||||||||
|
的有效操作,简化录制出来的代码,删除录制宏时理所当然会生成的“附加代码”,也可以增加能让代码更智能的循环或判断语句,让宏更“聪明”。 |
| ||||||||||||
|
不过个人感觉三戒老师的实例选取得比较没有代表性,反而会让人感觉,这种基础操作使用“宏”来进行有点多此一举, |
| ||||||||||||
|
因为像这种完全一致的修改操作,直接使用Shift+工作表选择,在活动工作表进行一次操作即可实现全部工作表的修改。 |
| ||||||||||||
|
当然,三戒老师的出发点是为了更好地展示怎么对宏代码进行修改或解读,而非教我们怎么用VBA去实现这一修改操作。▧◈ |
| ||||||||||||
|
|
| ||||||||||||
|
|
|
|
|
|
|
|
| ||||||
| ||||||||||||||
|
▣本课时主要内容: |
| ||||||||||||
|
☞ 什么是宏 |
| ||||||||||||
|
☞ 实例演示宏录制、执行(回放)的过程 |
| ||||||||||||
|
对代码进行简单的修改,介绍录制宏的局限性 |
| ||||||||||||
|
☞ 介绍一个批量打印文档的宏 |
| ||||||||||||
| ||||||||||||||
|
Ⅰ. 什么是宏 |
| ||||||||||||
|
☞ 宏录制器好比录像机,他具备有录像机的录制和播放功能,而录像机录制的是视频资料,而宏录制的则是操作命令集,即宏。 |
| ||||||||||||
|
而宏录制的则是操作命令集,即宏。 |
| ||||||||||||
|
☞ 引申到Excel中,当你打开宏录制功能时,宏录制器会像录像机一样将你在Excel中的大多数操作进行录制,并且可对这些录制 |
| ||||||||||||
|
内容(即代码)进行回放和编辑。 |
| ||||||||||||
| ||||||||||||||
|
Ⅱ. 实例演示宏 |
| ||||||||||||
|
三戒老师的实例上,主要是要实现将十二张格式相同而数据不同的工作表作相同的格式变换(修改); |
| ||||||||||||
|
先在其中一张工作表作目标要求的操作,并录制为宏,然后通过在代码中添加For Each…Next 遍历循环,让代码执行一次即完成全部工作表的格式修改; |
| ||||||||||||
|
当中还涉及到一些快捷键的使用,如Alt+F8、Alt+F11、F5,代码的逐步调试,并用插件VBA Friend生成传统VB程序行号、按F1直接查看VBA帮助内容等。 |
| ||||||||||||
|
|
| ||||||||||||
|
其中介绍了With…End With语句,这是“宏”录制经常会碰到的代码,通常在设置格式、属性的时候会生成,主要作用是简化语句,可以节省主体对象的名称; |
| ||||||||||||
|
录制宏时,必定会产生很多附加代码,而对于我们的要求来说,是没有用的,即使删除也不会影响我们要求的效果,但前提是需要我们了解各代码的意思及作用。 |
| ||||||||||||
|
虽然录制的宏可以直接运行并实际重复性连串的操作,但在实际运用上,我们通常都需要对录制的宏代码进行修改,主要是因为宏有它自身的局限性: |
| ||||||||||||
|
☞ 宏录制时有时候可能有出错,即录制的操作与实际要求有出入; |
| ||||||||||||
|
☞ 录制的宏必定会有多余的语句,为了提高代码的运行效率,我们需要作简化; |
| ||||||||||||
|
☞ 录制的宏功能较单一,不会自动实现条件判断或循环,这就需要手工增加或修改; |
| ||||||||||||
| ||||||||||||||
|
Ⅲ. 批量打印文档的宏 |
| ||||||||||||
|
本小节内容主要是演示了三戒老师编写的,实用性很强的批量文档打印代码: |
| ||||||||||||
|
具体代码内容如下: |
| ||||||||||||
|
Sub SanjiePrinter() |
|
| |||||||||||
|
' Application.ScreenUpdating = False |
|
| |||||||||||
|
With Application.FileSearch |
|
| |||||||||||
|
.LookIn = "D:/我的文档/桌面/已经实施" |
|
| |||||||||||
|
.FileType = msoFileTypeExcelWorkbooks |
| ||||||||||||
|
.SearchSubFolders = True |
|
| |||||||||||
|
If .Execute > 0 Then |
|
| |||||||||||
|
For i = 1 To .FoundFiles.Count |
|
| |||||||||||
|
Workbooks.Open Filename:=.FoundFiles(i) |
| ||||||||||||
|
Worksheets(1).PrintOut |
|
| |||||||||||
|
ActiveWorkbook.Close Savechanges:=False |
| ||||||||||||
|
Next i |
|
| |||||||||||
|
Else |
|
| |||||||||||
|
MsgBox "没有找到任何工作簿文件" |
|
| |||||||||||
|
End If |
| ||||||||||||
|
End With |
| ||||||||||||
|
' Application.ScreenUpdating = True |
| ||||||||||||
|
End Sub |
| ||||||||||||
|
|
| ||||||||||||
|
其中主要是使用了FileSearch对象,具体的代码含义可以参考9lee或小A的代码解释帖子,很详细很实用; |
| ||||||||||||
|
由于Office 2007中取消了FileSearch对象,所以如果要实现上面代码的内容,那么需要加载一个相似的类,实现二次开发, |
| ||||||||||||
|
关于这点,三戒老师有自己开发的类,链接地址如下: |
| ||||||||||||
|
http://club.excelhome.net/thread-276192-1-1.html |
| ||||||||||||
| ||||||||||||||
|
Ⅳ. 小结 |
| ||||||||||||
|
本节主要是进行宏录制,并带领我们一起解读“神秘”的代码,随即向我们演示如何简化代码、如何增加实际需要的功能代码,使之更高效。 |
| ||||||||||||
|
另外,三戒老师的实例操作,我们用基础操作也可一步到位,具体操作见下图演示,仅供参考,而非有什么目的: |
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
| ||||||||||||||
| ||||||||||||||
| ||||||||||||||
| ||||||||||||||
| ||||||||||||||
|
Ⅴ. 总结 |
| ||||||||||||
|
接下来就是课时四了,期望在宏的基础上,会有更深入的学习与练习,为VBA中级班打下良好的基础,^_^….. |
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
| ||||||||||||
|
|
|
zzmxy @ 2010.09.28 |
| ||||||||||
|
|
|
更多咨讯,请关注ExcelHome论坛: http://club.excelhome.net
|
| ||||||||||
|
|
|
| |||||||||||
|
|
|
| |||||||||||
|
|
|
| |||||||||||
|
|
|
| |||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|