分享

Excel VBA 学习总结 - 开发模式

 hdzgx 2019-11-09

  我学习的教程几乎都是讲解语法在前,罗列对象在后,给一堆例子在最后。我在学习的过程中,这些很重要,但不是最重要的,我觉得最重要的事是要教会我怎么解决实际的问题。所以我总结的时候,单独拿出开发模式这一块,我决定要重点强调实际应用的作用。纵观我所学的C/C++/C#,VB语言,我觉得学会简单的语法并不难,难的是应用所学去解决实际的问题。我解决问题的一般步骤是:分析问题规模,采用合适的算法,引用恰当的类库,然后是使用语法去表述并解决问题。

  VBA的开发模式其实也是解决问题的一般步骤。典型的VBA开发步骤是这样的,先录制符合条件的宏,然后修改宏,去掉冗余的步骤,调整代码,最后是部署宏。实际上这个开发的过程在VBA中是通吃一切的"万金油",学习走的是这个过程,开发走的还是这个过程。哪怕是啥都不懂的人,只想重复完成一些单调的任务,也是轻车熟路的完成这个自动化的过程。

  以下的操作过程是在Excel2010中完成的,其它的版本基本都差不多。

1. 录制宏

  录制宏很简单,操作步骤如下:

  • 在"View" Ribbon菜单下,点击"Macros" Tab下的"Record Macro..."按钮。如下图:

  • 在弹出的宏设置框中,设置宏的名字,快捷键,保存位置,说明信息,然后点击"OK"按钮开始录制。如下图:

  • 做你想做的事。

  • 录制宏的时候,"Record Macro..."按钮会变成"Stop Recording..."按钮,点击它停止录制。如下图:

  说明:宏的保存位置有3种:如果保存宏到当前文档中,那么这个宏只能在当前文档中使用;如果保存到新文档中,这个意思很直接;最后一个是保存到个人宏工作簿中,这个说明这个宏可以被所有的文档使用。个人宏工作簿是一个隐藏的工作簿,如果本机没有的话,Excel会自动创建的。打开Excel文档后,Excel也会打开这个个人宏工作簿,你可以选择显示/隐藏这个工作簿。

2. 修改宏

  打开宏列表(快捷键"Alt+F8"),可以看到所有打开Excel文档中的宏。如下图:

  选择宏,然后点击"Edit"就可以打开VB编辑器,编辑宏。在这个窗口中也可以删除录制的宏。

3. 运行/部署宏

  录好宏以后,我们可以通过以下几种方式运行这个宏:

  • 在宏列表窗口中,选中宏,点击“Run”运行宏;这种方式很然很不方便,很少人会用。

  • 如果设置了宏快捷键的,在任意时候,按快捷键运行宏;这种方式比较方便,但是快捷键还是很难记的。

  • 在Sheet中拖入一个Button控件(其它控件也是可以的,自己可以多尝试),当让你选择宏的时候,你把宏分配给它即可。然后鼠标点击别的地方,等控件脱离编辑状态后,点击就生效。当然不选也是可以的,后期可以鼠标右击控件,然后选择"Assign Macro..."分配宏。这种最常用,也是开发中主流的使用方式。

  • 自定义Ribbon菜单,把宏加到菜单中(也可以加到快捷菜单中,老版本中也可以加到Toolbar中)。这种方式也比较常见,就是设置有时候麻烦。需要右击Ribbon菜单的空白部分,选择自定义Ribbon菜单等选项,然后选择宏,最后加到相应的位置就可以了。

  其实,宏的保存位置和运行方式就决定了宏的部署情况,这个针对不同的用户,这个选择是不一样的。

  下面我也简单总结一下VBA主要的开发工具与常用的类型。

a. VB编辑器

  在宏列表窗口中,点击"Edit..."就可以进入宏的编辑器:VB Editor;也可以直接按快捷键Alt+F11打开VB编辑器。如下图所示:

  这个编辑器与大多数的IDE基本都是一样的,都包含菜单,代码编辑区,工程文档视图,属性窗口等等,这里就不详述了,试试就知道了。

b. Form控件与ActiveX控件

  这两个是有区别的,Form控件可以直接拖到Sheet中使用,而ActiveX控件是不可以直接在Sheet中使用的,它是放到User Form中使用的。Form控件的使用也比较简单,通常就是分配宏,或者点击右键菜单(基本上要拖动,或者设置Form控件的属性,都是要在空间上单击右键,让控件进入开发状态;设置好以后鼠标打击其它的单元格,就可以让Form控件进入使用状态)中的“Format Control...”做一些简单的设置。而ActiveX控件是开发中用的比较多的,配合User Form,可以提供相当专业的窗体应用程序体验。

c. User Form

  为什么要使用User Form呢?对于很多的用户而言,直接在Excel中录入程序用到得数据,或者直接通过简单的InputBox,或者MsgBox是不够的,有时候以窗口的形式呈现这些项会更方便。使用User Form也比较简单,基本与别的IDE是一样的,拖放控件上去,设置相关属性,编写相关的事件,就OK了。

这里有个小技巧:在往User Form上画控件的时候,如果双击某个Toolbox上的控件,那么这个控件就会一直被选中,如果是重复画同一个类型的控件,这样比较方便。画完后,单击Toolbox上的控件,就会取消选中。

对于User Form:

  • 最重要的几个属性是:Name(设置名称), Caption(设置标题)。

  • 最重要的几个操作是:Show(显示窗体,窗体的方法,一般在需要使用窗体的时候调用), Unload Me (关掉本窗体,一般在窗体的事件里用于关掉自己)。

  • 最重要的几个事件:Activate(用于初始化窗体),QueryClose(窗体关闭时触发,取消窗体关闭的最后机会,一般可用于判断窗体的关闭条件是否成立)。

对于ActiveX控件:

  • 最重要的几个属性是:Name(名称), Caption(标题), Accelerator(快捷键), TabIndex(Tab顺序), Enabled(是否启用)。还有每个控件独有的一些属性。

  • 事件基本都差不多重要,需要使用哪个就用哪个

d. Module 与 Class Module

  简答的说,Module就是放代码的地方,并没有什么特殊的意义,放在其中的成员和方法,Private的只有本Module中的方法可访问,Public的则程序中所有的Module都可以访问,而且访问的都是同一个值,修改以后,其他人得到的就是修改后的值。

  而Class Module就是面向对象中对象的概念了,它封装了成员和方法,可以New不同的实例(实例声明的类型是Object),实例有各自单独的成员区间,每个实例之间互不干扰。调用类的属性和方法的时候,都要通过实例去调用。

  所以简单的操作直接用Module就可以了,而复杂,重用度高的就可以封装成对象,以便多次重复使用。

e. 调试与运行程序

  • F5直接运行当前鼠标所在的方法/窗口。F8, Shift+F8, Ctrl+F8单调。F9设置断点。

  • Debug.Print可以在Immediate Window (快捷键Ctrl+G)输出变量值。也可以在该Window中直接输入表达式,查看值。

  • 可以通过Watch Window,Locals Window查看变量值。

 谨记:对象不决问Google,无从下手录制宏。

 谨记:不要尝试用VBA去解决所有问题,VBA有自己擅长的领域,也有它不擅长的场合。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多