两种注释的方法,其一是使用单引号,另一种是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