Module
Contents
Index 🔎︎

# 使用程序和函式

以下描述了 LibreOffice Basic 中程序和函式的基本用法。

在建立新模組時，LibreOffice Basic 會自動插入一個名為「Main」的 SUB。這個標準名稱與 LibreOffice Basic 專案的順序和起始點無關。您也可以為 SUB 重新命名，而不會帶來問題。

公開變數、程序、函式的名稱有使用限制。不能用和所處函式庫中的模組名稱相同的名稱。

程序 (SUB) 和函式 (FUNCTION) 可以協助您將一個程式分割為若干邏輯片段，從而使程式保持結構化。

使用程序和函式的一個好處是，為某個專案開發的含有任務程式元件的程式碼，同樣可以用於其他專案。

## 向程序 (SUB) 和函式 (FUNCTION) 傳送變數

可以向程序和函式傳送變數，但必須在 SUB 或 FUNCTION 中宣告所需的參數：

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)

    程式碼

    End Sub

呼叫 SUB 時使用以下語法：

    SubName(Value1, Value2,...)

傳送到 SUB 的參數必須適合 SUB 宣告中指定的參數。

同樣的情況也適用於 FUNCTION，以便傳回函式結果。透過指定函式名稱，並指定該函式傳回值的參數，可以在函式結束之前直接定義傳回結果。(請參閱示例)。

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type

    程式碼

    FunctionName=Result

    End Function

呼叫 FUNCTION 時使用以下語法：

    Variable=FunctionName(Parameter1, Parameter2,...)

您也可以使用完全合格的名稱來呼叫程序或函式：
Library.Module.Macro()
例如，若要從 Gimmicks 函式庫呼叫 Autotext 巨集，請使用下列指令：
Gimmicks.AutoText.Main()

## 透過值或參照傳送變數

可以透過參照或值將參數傳送到 SUB 或 FUNCTION。除非特別指定，參數通常透過參照傳送。這表示 SUB 或 FUNCTION 可以取得該參數，並且可以讀取和修改參數值。

如果要透過值傳送參數，請在呼叫 SUB 或 FUNCTION 時，在參數前插入關鍵字「ByVal」，例如：

    Result = Function(ByVal Parameter)

在此種情況下，FUNCTION 不會修改參數原來的內容，因為它得到的只是參數值而不是參數本身。

## 變數的作用範圍

在 SUB 或 FUNCTION 內定義的變數僅在該程序結束之前有效。此變數稱為「區域」變數。許多情況下，您需要在所有程序中、所有程式庫的各個模組中有效或 SUB 或 FUNCTION 結束後仍然有效的變數。

### 在 SUB 或 FUNCTION 之外宣告變數

    GLOBAL VarName As TYPENAME

只要 LibreOffice 階段作業未結束，變數就有效。

    PUBLIC VarName As TYPENAME

變數在所有模組中均有效。

    PUBLIC VarName As TYPENAME

變數僅在此模組中有效。

    PUBLIC VarName As TYPENAME

變數僅在此模組中有效。

### private 變數的範例

設定 CompatibilityMode(true) 以強制 private 變數在模組間為私有。

    ' ***** Module1 *****

    Private myText As String

    Sub initMyText

        myText = "Hello"

        print "in module1 : ", myText

    End Sub

    ' ***** Module2 *****

    'Option Explicit

    Sub demoBug

        CompatibilityMode( true )

        initMyText

        ' Now returns empty string

        ' (or rises error for Option Explicit)

        print "Now in module2 : ", myText

    End Sub

### 結束 SUB 或 FUNCTION 後儲存變數內容

    STATIC VarName As TYPENAME

變數保留其值，直到下次進入 FUNCTION 或 SUB。該宣告必須位於 SUB 或 FUNCTION 中。

## 指定 FUNCTION 的傳回值類型

與變數一樣，函式名稱後必須含有類型宣告字元或由「As」與相應關鍵字 (位於參數清單結尾處) 指示的類型，以定義函式傳回值的類型。例如：

    Function WordCount(WordText As String) As Integer