可选参数
Option Explicit
Function myproduct(r As Range, Optional usecolumn As Boolean)
Dim i&, j&, s&, k&
s = 0
'usedcolumn为true,按列求积,否则按行求积,参数可选,默认为False
If usecolumn Then
'逐列扫描,将每行个单元格相乘,再将乘积加到总s上
For j = 1 To r.Columns.Count
k = 1
For i = 1 To r.Rows.Count
k = k * r.Cells(i, j)
Next i
s = s + k
Next j
Else
For i = 1 To r.Rows.Count
k = 1
For j = 1 To r.Columns.Count
k = k * r.Cells(i, j)
Next j
s = s + k
Next i
End If
myproduct = s
End Function
第二个参数给false或者不写,都是按行求积
ismissing函数
Sub calldemo()
Dim x, y
x = myfunction(1)
y = myfunction(1, 3)
MsgBox "x是" & x & ", y 是 " & y
End Sub
Function myfunction(a, Optional b)
'这里的b不能定义为具体数据类型,也不能赋予默认值
If IsMissing(b) Then
'没提供b,为真
myfunction = a * 2
Else
myfunction = (a + b) * b
End If
End Function
传参
Sub 传参()
Dim x
x = myfun(3)
MsgBox x
x = myfun(3, 4)
MsgBox x
x = myfun(3, 4, 5)
MsgBox x
x = myfun(3, , 5)
MsgBox x
x = myfun(c:=3, a:=5)
'a=3,c=5,说清楚了就不需要一一对应顺序了
MsgBox x
End Sub
Function myfun(a, Optional b = 0, Optional c = 0)
'提供两个默认值
myfun = a + b - c
End Function
msgbox参数
加个逗号后面可以写参数
Sub msgbox参数()
MsgBox "注意!", 4
'是否双按钮
End Sub
利用msgbox的传参来做窗体
Sub msgboxDemo()
Dim i, r
r = Selection.Row
i = MsgBox("删除第" & r & "行数据,是否确定?", vbYesNo)
'vbyes=6
If i = 6 Then
Rows(r).Delete
End If
End Sub
括号问题
情况一 无参数,调用不写括号
情况二 有参数,语句中间调用
情况三,有参数,语句开头调用
统一解决法:加Call
值传递和引用传递
引用传递
Sub 引用传递和值传递()
Dim x As Integer
x = 1
Call 子过程(x)
MsgBox x
End Sub
Sub 子过程(a As Integer)
a = a * 2
End Sub
值传递
Sub 引用传递和值传递()
Dim x As Integer
x = 1
Call 子过程(x)
MsgBox x
End Sub
Sub 子过程(ByVal a As Integer)
a = a * 2
End Sub
byval值传递
扫描二维码关注公众号,回复:
8738143 查看本文章
求余运算
Option Explicit
Sub 染色()
Dim mycolor(3) As Long, i As Integer, k As Integer
'用数组存数据
mycolor(0) = vbRed: mycolor(1) = vbYellow
mycolor(2) = vbBlue: mycolor(3) = vbGreen
i = 3
Do While Cells(i, 1) <> ""
Cells(i, 1).Resize(1, 4).Interior.Color = mycolor(i Mod 4)
'用求余数的方法获得循环
i = i + 1
Loop
End Sub
随机数染色
Option Explicit
Sub 随机数染色()
Randomize
'一个程序用一次就够了
'用系统时间生成随机数
Dim mycolor(3) As Long, i As Integer, k As Integer
'用数组存数据
mycolor(0) = vbRed: mycolor(1) = vbYellow
mycolor(2) = vbBlue: mycolor(3) = vbGreen
i = 3
Do While Cells(i, 1) <> ""
Cells(i, 1).Resize(1, 4).Interior.Color = mycolor(Int(Rnd() * 4))
'用随机数获取1-4
i = i + 1
Loop
End Sub
作弊生成随机数
Option Explicit
Sub mycheat()
Dim i As Integer
Randomize
i = Rnd()
'如果随机数i在0到0.5之间,则随机生成一个1到3之间的中奖号码
If i < 0.5 Then
Range("c7").Value = Int(Rnd() * 3) + 1
Else '否则,随机生成一个4到100之间的中奖号码
Range("c7").Value = Int(Rnd() * 97) + 4
End If
End Sub