使用过程和函数
下面介绍 LibreOffice Basic 中过程和函数的基本用法。
在建立新模块时,LibreOffice Basic 会自动插入一个名为「Main」的子程序。这个默认名称与 LibreOffice Basic 项目的顺序和起始点无关。可以将此子程序重命名为其他名称,而不会带来问题。
对您 public 变量、sub 与函数名称的一些限制。您不能使用与同库模块相同的名称。
利用过程和函数,可以将一个程序划分为多个逻辑片段,有助于使程序保持结构化。
使用过程和函数的一个好处是,如果为项目开发的程序代码含有任务组件,则可以将此代码用于其他项目。
向过程和函数传送变量
可以向过程和函数传送变量,但必须在子程序或函数中声明所需的参数:
Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
程序代码
End Sub
调用子程序时使用以下语法:
SubName(Value1, Value2,...)
传送到子程序的参数必须与子程序声明中指定的参数匹配。
同样,传送到函数的参数也必须与函数声明中指定的参数匹配,以便正常返回函数结果。通过将函数名称作为参数,并向其指定该函数的返回值,可以在函数结束之前直接定义返回结果 (请参阅示例):
Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
程序代码
函数名称=结果
End Function
调用函数时使用以下语法:
Variable=FunctionName(Parameter1, Parameter2,...)
也可以用完整的名称调用过程或函数:
Library.Module.Macro()
例如,要从 Gimmicks 库中调用 Autotext 宏,可使用命令:
Gimmicks.AutoText.Main()
通过值或引用传送变量
可以通过引用或值将参数传送到子程序或函数。除非特别指定,通常是通过引用传送参数。这意味着子程序或函数可以获取该参数,并且可用读取和修改参数值。
如果希望通过值传送参数,请在调用子程序或函数时,在参数前插入关键字 "ByVal",例如:
Result = Function(ByVal Parameter)
在这种情况下,函数不会修改参数的原始内容,因为它获得的仅仅是参数值而不是参数本身。
变量范围
在某个子程序或函数中定义的变量仅在该过程中有效。这种变量被称为「局部」变量。在很多情况下,您需要定义在所有过程中、所有程序库的各个模块中或者在退出子程序或函数后仍有效的变量。
在子程序或函数之外声明变量
Global VarName As TYPENAME
只要 LibreOffice 会话未结束,变量就有效。
Public VarName As TYPENAME
变量在所有模块中均有效。
Private VarName As TYPENAME
变量仅在当前模块中有效。
Dim VarName As TYPENAME
变量仅在当前模块中有效。
私有变量示例
通过设置 CompatibilityMode(true) 使私有变量在模块间私有。
' ***** Module1 *****
Private myText As String
Sub initMyText
myText = "Hello"
Print "现在在 module1 中: ", myText
End Sub
' ***** Module2 *****
'Option Explicit
Sub demoBug
CompatibilityMode( true )
initMyText
' 现在返回空字符串
' (在 Option Explicit 环境则报错)
Print "现在在 module2 中: ", myText
End Sub
退出子程序或函数后保存变量内容
Static VarName As TYPENAME
变量的值一直有效,直到下次进入函数或子程序。 声明必须存在于子程序或者函数之内。
指定函数的返回值
与变量一样,函数名称后必须含有类型声明字符或由「As」与相应关键字 (位于参数列表末尾) 指示的类型,以定义函数返回值的类型。例如:
Function WordCount(WordText As String) As Integer