我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。
如果您只是一般的职场VBA需求,可以打包选择7.1.3.9教程+汉英手册,第7套教程是入门,第1套教程是入门后的提高,第3套教程字典是必备的VBA之精华,第9套教程是实用的典型案例讲解。这四套教程内容掌握后足以处理一般工作中的问题,实际写代码的时候再辅助代码汉英手册,足矣!如果您想进一步提高,就需要选择高级阶段的教程了。
VBA是面向对象编程的语言,博大精深。很多朋友咨询VBA的学习方法,我会陆续给大家讲解一些我的经验,大家可以慢慢体会。今日的内容是如何学习VBA之1:初学VBA人员要重视程序文件

【分享成果,随喜正能量】任何寻求安慰的行为,都只会带来短暂的安全感,不能获得成长。成长是特别艰难的自省,必须抛弃所有顺应自己认知的言行。走不出自己的执念,到哪都是囚徒。
如何学习VBA之1:初学VBA人员要重视程序文件
我初学VBA时,当时的资料是非常少,只能借助于实际代码去摸索。从实际代码中去理解这种语言。看的多了,利用的多了,再看一些理论讲解时,理解就更加透彻了。所以一直以来我特别注重程序文件,也反复告诫给众多的学员,要多看程序文件。在我的第七套教程《VBA之EXCEL应用》中,我反复强调"建议大家至少能看两遍,以达到前后融汇贯通,很好地理解这套教程的内容。再次强调一遍,建议大家至少能看两遍。"这是什么意思呢?今天就举几个例子给大家以共享。
我们看下面的代码,这段代码是我第七套第一章刚开始时讲解"实现三个单元格值变换位置的代码"时给出的代码:
Private Sub CommandButton1_Click()
Dim tempA As Double, tempB As Double, tempC As Double
tempA = Range("A5").Value
tempB = Range("C5").Value
tempC = Range("E5").Value
Range("A5").Value = tempC
Range("C5").Value = tempA
Range("E5").Value = tempB
End Sub
同时给出了这段代码的解释,如下截图:

1.1 理解1---代码的变量
如果单纯从代码上去理解,我上面的注释是非常到位了。但是当你在学到数据类型(第七套教程的第五章)后,我们理解了"Double 双精度浮点变量类型"讲解的含义,就会知道,上述的代码所能替换的单元格数据是有一定范围的,如果超出了这个范围,上述代码会报错。这是因为我们用于存储单元格的宿主变量定义为Double类型的原因。那么如果我们实际需要的数据范围比Double更大,或者更小,该如何修正上述代码呢?这就是我们在学习了第七套教程的第五章后再次学习这段代码应该考虑的问题了。
1.2 理解2---对象的描述
在上述代码中有这样的语句:tempA = Range("A5").Value。给出的解释是将A5单元格的值传递给变量tempA,如果我们在学习了"对象层次结构的描述"(第七套教程第三章)之后,我们再看上述的语句时,应该写出这句代码的完整版:
tempA =Application.Workbooks("工作簿01.xlsm").Worksheets(2).Range("A5"). Value
那么为什么可以采用简化的写法呢?我们知道这个代码是写在工作表的模块中,同时这个代码是写在工作表按钮的CommandButton1_Click()事件中,当我们点击按钮时是默认选择了上述对应的工作簿和工作表的,所以省略了。这就是我们在第二次读时应该想到的。
如果大家在学习了我的第一套教程第八十八讲:VBA代码的优化篇,使用With语句引用对象后,上述语句用WITH语句改写,又该如何呢?请大家思考。

1.3 理解3---控件按钮
我们继续开始提到的简单代码的解读,这个代码写在了工作表中一个按钮单击事件中,那么这个按钮是如何建立的呢?
这个问题我们要在学到第七套第十五章讲到ActiveX控件(ActiveX Controls)时,会得到答案。在讲到ActiveX控件时,我们讲了在工作表中可以利用的各个控件,这些控件我们在利用的时候可以得心应手,可以实现某些特有的功能,比如按钮,就是我们可以利用的可以响应我们要实现的一系列操作的开关。有了这个开关,我们在工作表中的操作就可以非常的方便了。比如可以集合某类操作于一个按钮中,当点击时就可以实现我们需要的操作了。所以大家经常会在我的程序文件中看到这类按钮:



我20多年的VBA实践经验,全部浓缩在下面的各个教程中:



