変数の有効範囲と有効期限
Apache OpenOffice Basic で確保される個々の変数は、プログラムのすべての領域で使用可能というわけではなく、それぞれ有効となる範囲と期限があります。変数が確保され続ける期限および利用可能なプログラム範囲は、各変数の種類と宣言された位置に依存します。
局所変数
関数や手続きの内部で宣言された変数は、局所変数と呼ばれます。
Sub Test Dim MyInteger As Integer ' ... End Sub
このような局所変数は、該当する関数や手続きが実行されている間は確保され続けますが、実行が終了した段階で消去されます。このため関数を呼び出す際には、以前の呼び出し時に代入された値などを利用することはできません。
このような値を保持しておくには、変数を Static として定義しておく必要があります。
Sub Test Static MyInteger As Integer ' ... End Sub
![]() |
VBA とは異なり、Apache OpenOffice Basic の局所変数には、モジュールヘッダにある大域変数やプライベート変数と同じ名前を付けることはできません。このため、VBA アプリケーションを Apache OpenOffice Basic に移植する際には、重複した変数名を変更する必要があります。 |
パブリックドメイン変数
パブリックドメイン変数は、モジュールのヘッダセクションで Dim キーワード を使って定義します。この変数は、ライブラリ内のすべてのモジュールで利用可能となります。
モジュール A:
Dim A As Integer Sub Test Flip Flop End Sub Sub Flip A = A + 1 End Sub
モジュール B:
Sub Flop A = A - 1 End Sub
変数 A の値は、関数 Test では直接変更されませんが、間接的に関数 Flip で 1 増やされ、関数 Flop で 1 減らされています。この両者の関数による変更は、大域的 (グローバル) に実施されています。
パブリックドメイン変数の宣言用キーワードには、Dim の代わりに Public も使用できます。
Public A As Integer
パブリックドメイン変数は、該当するマクロが実行されている間は確保され続けますが、実行が終了した段階で消去されます。
大域変数
大域変数はパブリック変数と同等の機能を担っていますが、該当するマクロの実行終了後もその値が確保され続ける点が異なります。大域変数は、モジュールのヘッダセクションでキーワード Global を使って定義します。
Global A As Integer
プライベート変数
Private 変数は、定義されたモジュール内部でのみ有効となります。プライベート変数の定義には、キーワード Private を使用します。
Private MyInteger As Integer
複数のモジュールで同じ名前の Private 変数が使われている場合、Apache OpenOffice Basic では、これらの変数はそれぞれ個別の変数として確保されます。次のサンプルコードでは、モジュール A およびモジュール B の両方で、C という名前の Private 変数を確保します。関数 Test は、最初にモジュール A の Private 変数を設定し、次にモジュール B の Private 変数を設定します。
モジュール A:
Private C As Integer Sub Test SetModuleA ' Sets the variable C from module A SetModuleB ' Sets the variable C from module B ShowVarA ' Shows the variable C from module A (= 10) ShowVarB ' Shows the variable C from module B (= 20) End Sub Sub SetmoduleeA C = 10 End Sub Sub ShowVarA MsgBox C ' Shows the variable C from module A. End Sub
モジュール B:
Private C As Integer Sub SetModuleB C = 20 End Sub Sub ShowVarB MsgBox C ' Shows the variable C from module B. End Sub
Content on this page is licensed under the Public Documentation License (PDL). |