本人主要是从事Android,iOS及JAVA web后台开发,所以本篇文章主要说的是有java编程语言基础后,书写VBA经常会犯的几个错误以及本人在写VBA工具中的几个思路,代码中斜线内容就是特别注意的地方。
1.条件语句:
java中:
if () {
} else if() {
} else {
}
VBA中:
If () then
Elseif () then
Else
End If
2.循环
VBA的写法是
for i = 1 to 10 step 1
End for
注意:VBA主要是做单元格的循环,是从1开始的!!!如果需要修改每次加的值只需要修改step就行
3.自定义方法
VBA中有两种,一种是sub,一种是function,这两者最大的区别就是有没有返回值,如果需要返回值,一定要用function;如果不需要,两者都可以,本人习惯用sub。如果需要给按钮指定宏的话,是只能指定sub,不能指定function的。
Function test(ByVal temp As String) As String
test = temp
End Function
(1)函数的返回值是使用函数名直接赋值得来的,相当于java中的 return temp;
(2)形参有两种一种是ByVal,一种是ByRef,ByVal是值传递,也就是说一个数值传入之后,在函数中无论做什么操作,也不会修改传入参数本身,ByRef是址传入,如果函数中修改了形参的值,那么传入参数的值就改变了。这个可以参考C语言的指针中的值传递和址传递的区别。一般都是ByVal
4.赋值
Dim test As Integer
test = 5
值类型直接如上所示赋值即可,实际上VBA真正处理时是使用了let语句
let test = 5
那么在处理对象中,VBA是需要使用set语句的,但是我们会经常忘记加上set,导致报错
"运行时错误g1,未设置对象变量或With块变量"
Dim testRange as Range
set testRange = Range("A1")
5.变量的命名
其他语言:以英文字母或下划线开头,后面可以使用英文字母,下划线及数字
VBA:以英文字母开头,后面可以使用英文字母,下划线,数字及汉字
6.代码书写的位置
VBA的代码可以写在worksheet,workbook,module中,建议方法写在module,然后在worksheet和workbook的按钮事件和worksheet,workbook的事件中调用module中的方法。
好处:sheet页删除后,实现方法仍在module中,只需要新建sheet页,添加按钮去调用就可以用。
后续会写一篇VBA技巧的文章,提供禁止用户修改sheet页名,禁止删除sheet页的小技巧。
7.VBA代码扩展性
一个是工具页,一个是工具配置页,module中代码采用自定类型参数,工具页中代码只负责读取工具配置页中单元格相应的值,生成自定义参数,然后调用module中的代码。之前写个工具花费1天,整改了两次代码,最后又花费了2天,将心得体会分享出来,希望对看文章的你有所帮助。