目次
LibreOffice Basic でのサブプロシージャ・関数の書き方をまとめました。 だいたい VBA と同じですが、 気を付けるべきところもあります。
環境
- LibreOffice 5.2.0.4
サブプロシージャ Sub
Sub
の後にプロシージャ名を書き、その後に引数を並べます。 引数がなければ、括弧は省略できます。 プロシージャの最後には End Sub
を書きます。
1 2 3 |
Sub TestProcedure(A As Integer, B As String, Optional C As Object) ' Something End Sub |
プロシージャを途中で終了するときは、 Return
ではなく Exit Sub
を記述します。
関数 Function
Function
の後に関数名を書き、その後に引数を並べます。 そしてその後で戻り値の型を指定します。 引数がなければ括弧ごと省略できますし、戻り値の型も省略できます。 関数の最後には End Function
を書きます。
1 2 3 4 5 6 7 |
Function TestFunction(A As Integer) As String If A < 10 Then TestFunction = "Hello" Else TestFunction = "World" End If End Function |
関数の戻り値は、関数名に代入するように設定します。 複数回設定した場合は、変数と同じように上書きされて、最後の値が戻り値として採用されます。 関数を途中で終了するときは Return
ではなく Exit Function
を記述します。
オプション引数
引数に Optional
をつけると、 呼び出す際に引数を付けてもつけなくてもよくなります。
1 2 3 4 5 |
Sub TestProcedure(Optional B As String) If Not IsMissing(B) Then MsgBox "B is not passed!" End If End Sub |
IsMissing
で、 引数が渡された否かを判定できます。
Sub TestProcedure(Optional B As String = "a")
のようにデフォルト引数を設定することはできません。
引数についての注意
VBA には ByVal
, ByRef
というのがあり、 値渡しか参照渡しかを指定することができました。 そしてデフォルトでは ByRef
(参照渡し) になっていました。
LibreOffice Basic でも同じように参照渡しになっています。 そして、 ByVal
をつけることで値渡しにできます。
VBA : The method for passing parameters to procedures and functions in OpenOffice.org Basic is virtually identical to that in VBA. By default, the parameters are passed by reference. To pass parameters as values, use the ByVal keyword. In VBA, you can also use the keyword ByRef to force a parameter to be passed by reference. OpenOffice.org Basic recognizes but ignores this keyword, because this is already the default procedure in OpenOffice.org Basic.
次のコードを実行すると、 AddRef
の後は引数に渡した i
の値が2になりますが、 AddVal
のところでは i
は変化しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Test() Dim i As Integer i = 1 AddRef(i) MsgBox i AddVal(i) MsgBox i End Sub Sub AddRef(a As Integer) a = a + 1 End Sub Sub AddVal(ByVal a As Integer) a = a + 1 End Sub |