一、自定义函数
(1)用“DEMO-1-打造新的函数” 演示自定义函数:例1,转美金函数,例2,根据性别生成称呼(function ch(st as string)),在工作表和vba中均能用;
(2)(可选)用“DEMO-2-日期转换”演示自定义日期转换函数,注意DateSerial(year, month, day)函数返回包含指定的年、月、日的 Variant (Date);
(3)用“DEMO-3-在工作表中调用VBA函数”演示,将vba函数用自定义函数方式转化到工作表使用;
(4)总结自定义函数的使用,是一组可重复使用的代码,可以在程序中的任何地方调用。Function 函数名(参数) “函数体:函数名=······” End Function
二、带参数的sub过程
思考:Function和sub的定义非常类似,function定义时的()的作用是传递参数,定义sub过程时为什么也有()?原因在于sub也可带参数,使得sub代码可以重用
演示:用“DEMO-4-创建带参数的过程”演示生成新表的宏被设置参数后可调用,减少了代码量。
原方案代码:Sub cjb( ) |
Sub cjb(str As String) |
Sub abc2()
|
但原解决方案仍有问题:要设置多个宏调用原宏,且调用所需参数传递较为麻烦。
进一步解决方案如下代码所示,但注意此时调用宏不能加“call”,否则报错,研究后发现,若加了“call”,则运行该宏时则会在不运行前序代码的情况下直接运行call语句,
造成程序无法识别其参数的问题,进而报错。具体原因尚待进一步分析。悬赏
Sub abc2() Dim k As String k = ActiveSheet.Name '获取原表的表名 mycell = Application.InputBox(prompt:="请选择单元格:", Type:=2) '弹出选择单元格的输入框,返回字符串并传递给mycell cjb (mycell) '该语句不能加“call”,否则会先运行call语句导致报错
Sheets(k).Select '返回原表c
End Sub
三、使用加载宏工具
1、想将一个宏重复使用,怎么办?
(1)新建文件,将宏复制到该文件;
(2)另存该文件,选择“加载宏”的格式后,保存路径自动切换为“C:\Users\Administrator\AppData\Roaming\Microsoft\AddIns”,该路径不能更改,是excel默认的加载项路径;
(3)“开发工具”-->“加载项”-->确定后,excel主程序将一直嵌入该代码;
(4)关闭原文件后,新打开一个文件:“文件”-->“选项”-->“快速访问工具栏” -->选择“宏”-->添加“test”后确定
或-->“自定义功能区” -->选择“宏”-->按要求添加“test”、修改图标后确定(图标不能自定义,悬赏)
(5)观察左上方的快速访问工具栏,多出来的按钮已可使用该宏。用“DEMO-6-无代码数据”和“DEMO-5-第四讲中的拆分文件”演示该按钮的作用。
(6)为避免以后打开vba后显示加载宏的代码,可“开发工具”-->“加载项”-->将该加载宏前的勾去掉并点确定。
2、可否用同样方式重复使用自定义函数?
重复上述步骤(1)--(3)即可。