2. 进入Visual Basic窗口后,选择菜单“插入→模块”命令,于是得到“模块1”,在其中输入如下自定义函数的代码(图2):
通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为“Mircosoft Excel加载宏”,然后输入一个文件名,如“TAX”单击“确定”后文件就被保存为加载宏(图4)。然后选择菜单“工具→加载宏”命令,打开“加载宏”对话框,勾选“可用加载宏”列表框中的“Tax”复选框即可,单击“确定”按钮后(图5),就可以在本机上的所有工作薄中使用该自定义函数了。想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。
说明:Windows XP系统下加载宏文件的默认保存位置为:C:Documents and Settingszunyue(用户帐户)Application DataMicrosoftAddIns文件夹。
Function REWARD(sales, years) As Double
Const r1 As Double = 0.04
Const r2 As Double = 0.07
Const r3 As Double = 0.1
Const r4 As Double = 0.13
Const r5 As Double = 0.16
Const r6 As Double = 0.19
Select Case sales
Case Is <= 2800
REWARD = sales * (r1 + years / 200)
Case Is <= 7900
REWARD = sales * (r2 + years / 200)
Case Is <= 15000
REWARD = sales * (r3 + years / 200)
Case Is <= 30000
REWARD = sales * (r4 + years / 200)
Case Is <= 50000
REWARD = sales * (r5 + years / 200)
Case Is > 50000
REWARD = sales * (r6 + years / 200)
End Select
End Function
Function RunningTotal (num)
Static ApplesSold
ApplesSold = ApplesSold + num
RunningTotal = ApplesSold
End Function
如果用 Dim 而不用 Static 声明 ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。
在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。
声明所有的局部变量为静态变量
为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:
Static Function RunningTotal (num)
这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程。