您已经知道可以在宏中使用子例程。 VBA还允许您定义可在宏中使用的函数。函数和子例程之间的区别在于,函数可以返回值,而子例程则不能。请考虑以下宏:

Sub Macro1()

TooMany = TestFunc     If TooMany Then MsgBox "Too many columns selected"

End Sub
Function TestFunc()

TestFunc = False     If Selection.Columns.Count > 10 Then        TestFunc = True     End If End Function

宏(Macro1)调用TestFunc函数。该函数根据执行的测试返回值False或True。然后,Macro1对返回的值进行操作。请注意,函数名称可以出现在等号的右侧。这使得功能非常强大,并且是任何程序的重要组成部分。在函数内,结果被分配给TestFunc,这是函数本身的名称。这是函数返回的值。

与子例程一样,您也可以将参数传递给函数。

下面的宏对此进行了说明:

Sub Macro1()

A = 12.3456     MsgBox A & vbCrLf & RoundIt(A)

End Sub
Function RoundIt(X) As Integer     RoundIt = Int(X + 0.5)

End Function

这个简单的宏(Macro1)定义了一个数字,然后使用消息框显示该数字以及将数字传递给RoundIt函数的结果。输出为12.3456和12。请注意,应将参数传递到括号内。还要注意,该函数使用的变量名称与传递的名称不同。这是因为VBA重新分配了X的值(函数需要),因此它与A的值(程序传递给函数的值)匹配。

在将参数传递给函数时要记住的重要一点是,程序必须传递与函数期望的参数数量相同的参数,并且参数必须具有匹配的类型且顺序正确。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(11765)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较旧菜单界面找到此技巧的版本: