使用过程和函数

下面介绍 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