VBA-语法-函数和过程


两种注释的方法,其一是使用单引号,另一种是Rem。

函数可以在Excel表格中像一般的Excel函数那样使用,但过程不可以
过程可以指定给Excel表格中的按钮或者图片等对象,但是函数不可以
函数只能在被调用时执行,比如在过程中调用,或者在另一个函数中调用,或者在Excel表格中调用。但不能直接执行,而过程是可以的

Sub sub_test(s As String)
    Debug.Print s
End Sub

Sub test()
    Call sub_test("hello")
End Sub

Function 函数名(参数1, 参数2, ...) As 数据类型
    ' 需要在函数中执行的代码
    函数名 = 函数执行后的结果
End Function

退出Sub过程,使用Exit Sub语句。
退出函数,使用Exit Function语句。

====================================
可选参数

1、可选参数可用Optional关键字标示;
2、可选参数需赋予默认值;
3、如未赋予默认值,那么需要在函数里可以通过ismissing(b)来判断该参数时候有值传入 ;
4、Optional参数(可选参数)必须放在后面,即先必选参数再可选参数。

如果有多个可选参数,那么第一个可选参数后的参数必须还是可选参数

可选参数在定义时用Optional关键字声明,可选参数必须放在参数列表的最后面
Sub sub_test(Optional s As String = "Hello, World")
    Debug.Print s
End Sub

Sub Sub1(var1 As String, Optional Var2 As String = "可选参数默认值") 

function multi(a as integer,b as integer,optional third)
    if not ismissing (third) then  '判断可选参数third是否有值传入 

====================================
返回值与括号

方法后面的参数是不用加括号的,只需用空格隔开
用到返回值,加括号;
没用到返回值,不要加括号。
函数或方法的语法里有括号,表示它有返回值
在语句里如果不利用这个返回值赋给变量的话,调用函数或方法不要加括号。

MsgBox "Task Completed!", 0, "Task Box" 
Answer3 = MsgBox("Are you happy with your salary?", 4, "Question 3") 

使用命名参数调用MsgBox函数,但它将忽略返回值。
MsgBox Title:="Task Box", Prompt:="Task Completed!" 

使用命名参数,并将返回值分配给变量。
answer3 = MsgBox(Title:="Question 3",  Prompt:="Are you happy with your salary?", Buttons:=4) 


如果定义了一个Function,这个function还有返回值
在调用function()的时候需要有个变量接收返回值,否则会报错
如果返回值不想接收,那么调用方法的时候就不要加小括号了。

调用一个无参数的方法时,不带小括号,否则编译不通过

======================================
值传递引用传递

参数可以定义成 ByVal和ByRef,默认是ByRef,参数传入前一定要先定义,否则会提示类型不符
参数传值的时候如果是对一个对象ByRef,那么这个对象需要Dim,否则就会编译报错

方法定义:
Public Sub writeScreenSheet(ByRef screenSheet As Worksheet)

调用的时候:
Dim s As Worksheet
Set s = 。。。
writeScreenSheet(s)

======================================

ByRef的问题

Private Function inner(ByRef a As Integer)
    a = 8
End Function

Public Sub Test()
    Dim t As Integer
    t = 5
    'inner (t)  这样调用的时候还是5,所以必须加call才可以。不知道为啥,奇怪的逻辑
    Call inner(t) 这样调用的时候,就是8了
    MsgBox t
End Sub

当定义结构体的时候,ByRef也是好用的
Public Type ConfigData
    pQueryString As String
    pOutSheets As String
End Type

Private Function inner(ByRef a As ConfigData)
    a.pQueryString = 9
End Function

Public Sub Main()
    Dim t As ConfigData
    t.pQueryString = 5
    Call inner(t)
    MsgBox t.pQueryString
End Sub
 

很详细的VBA语法介绍: 一、VBA入门知识 。。。 二、了解对象、属性、方法和事件 1、了解对象、属性、方法和事件 2、Application 对象 3、Workbook 对象 4、Workbooks 属性 5、Range 对象 6、Range 属性 7、Cells 属性 。。。 三、VBA语法 (一)Visual Basic 的命名规则 1、写 Visual Basic 语句 2、写声明语句 3、Dim 语句的语法 4、Activate 方法的语法 5、Set 语句 3 6、MsgBox 函数语法 7、选项语句的语法 8、AddressOf 运算符 9、了解变体 10、写赋值语句 11、写可执行的语句 12、Public 语句 13、Private 语句 14、使用数组 15、使用常数 16、AppActivate 语句 17、Beep 语句 19、Date 语句 20、Error 语句 21、Exit 语句 22、GoSub...Return 语句 23、GoTo 语句 24、Input # 语句 25、Let 语句 26、Load 语句 27、Name 语句 28、On...GoSub、On...GoTo 语句 29、Open 语句 30、Rem 语句 31、Stop 语句 32、Time 语句 33、While...Wend 语句 (二)逻辑语句 1、If...Then...Else 语句 2、使用 Select Case 语句 3、使用 For...Next 语句 4、For Each...Next 语句 5、 Do...Loop 语句 6、 With 语句 (三)过程 1、写 Sub 过程 2、写 Function 过程 3、写 Property 过程 四、 ActiveX 控件 1、AfterUpdate 事件 2、Click 事件 3、Click 事件、命令按钮控件、Accelerator 和 Caption 属性示例 4、DblClick 事件 5、Error 事件 6、KeyDown 和 KeyUp 事件 7、KeyPress 事件 8、KeyPress 事件示例 9、MouseDown 和 MouseUp 事件 10、MouseMove 事件 11、列表框控件 12、SpinDown 和 SpinUp 事件 13、SpinDown、SpinUp 事件和 Delay 属性示例 14、组合框控件 15、命令按钮控件 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值