七、⾃定义函数带参数的sub过程
⼀、⾃定义函数
(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( ) Dim sht As Worksheet
For Each sht In Sheets
  If sht.Name =
sheet1.range("a1") Then
    k = 1
  End If
Next
If k = 0 Then
Sheets.Add
after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = range("a1")
End If Sub cjb(str As String)
Dim sht As Worksheet
For Each sht In Sheets
  If sht.Name = str Then
    k = 1
  End If
Next
If k = 0 Then
Sheets.Add
after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name
= str
End If
Sub abc2()
Call
cjb(Sheet2.Range("a8"))
Sheet2.Select
End Sub
  但原解决⽅案仍有问题:要设置多个宏调⽤原宏,且调⽤所需参数传递较为⿇烦。
    进⼀步解决⽅案如下代码所⽰,但注意此时调⽤宏不能加“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)即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。