Other Instructions
Type...End Type
構造体とはいくつかのデータフィールドをまとめたものであり、単体の項目として操作できます。昔の表現で言うと、構造体をレコードもしくはレコードの一部と考えても構いません。
API では、定義済みの構造体を頻繁に使っています。ただし、それらの構造体はUNO構造体であり、高度に特化された種類の構造体です。
定義
Type...End Type 文を用いて、あなた自身の(非UNO)構造体を定義できます。
Type aMenuItem '型の名前を指定する ' 構造体の中でデータフィールドを定義する。 ' 個々の定義は "Dim" 無しの Dim 文に似通ってる。 aCommand as String aText as String End Type '定義を閉じる
インスタンス
Type の定義は、パターンもしくはテンプレートとしてだけであり、実際の複数の変数の集合ではありません。読んだり記録したりするのに使われる実際の複数の変数としての、その型のインスタンスを作るには、次のように、Dim as New 文を使います。
Dim maItem as New aMenuItem
スコープ
以下の例に示しているように、Type の定義はモジュールの先頭に書けます (最初の Sub もしくは、 Function の前)。 そのようにして、その定義はそのモジュール内の全てのルーチンに有効になります。
OpenOffice.org バージョン 3.0 では、変数とは違って、そのモジュールの外側からその定義に対してアクセスできるようにする方法はありません。
その新しい型のインスタンスは変数であり、変数スコープの通常の規則に従います (Scope and Life Span of Variables参照)。
定義の使用例、インスタンス中のフィールドの参照方法については、 With...End With 節にあります。
With...End With
限定子
一般的に、Basic では、どのような複数の名前がそこで定義されているかを把握するための Object のようなコンテナの内側を調べるようなことはしません。もし、そのような名前を使いたいのであれば、Basic に対してどこを調べるかを指示しなければなりません。そのオブジェクトの名前を 限定子 として使うことによって、その指示を行います。次のように、そのオブジェクトの名前を内側の名前の前に書いて、ピリオドで区切ります。
MyObject.SomeName
コンテナは他のコンテナを保持できるので、二つ以上の限定子を必要とする場合もあります。次のように、複数の限定子を外側から内側へ順番に書きます。
OuterObject.InnerObject.FarInsideObject.SomeName
これらの名前は、"ドット演算子 ('.') で接続された" と記述される場合もあります。
With による別の書き方
With...End With で囲む文は、すべての限定子を毎回書き下す方法の代替手段を提供します。API 中のいくつかの限定子は非常に長くなる場合があります。With 文で限定子を指定できます。Basic が End With 文に到達するまでの間、Basic は、ピリオド(単項ドット演算子)で始まる 部分的に限定された 名前を探します。コンパイラは With からの限定子を、その部分的に限定された名前の前に書かれているかのように、使います。
例1: ユーザー定義構造体
この例では、構造体の定義方法および使い方、その構造体中の項目の参照方法、With の使う使わない例を示しています。どちらの方法でも、( Type の定義から来ている ) データフィールドの名前は、( Dim 文から来ている ) インスタンスの名前で限定されていなければなりません。
Type aMenuItem aCommand as String aText as String End Type Sub Main ' ユーザー定義構造体のインスタンスを作成する。 ' "New" キーワードに気を留めること。 Dim maItem as New aMenuItem With maItem .aCommand = ".uno:Copy" .aText = "~Copy" End With MsgBox "Command: " & maItem.aCommand & Chr(13) _ & "Text: " & maItem.aText End Sub
例2: Case 文
Cells and Ranges の次の例には、完全に明確に書かれている Case 文中の限定子があります。同じ例をより簡潔に次の方法で書けます。
Dim Doc As Object Dim Sheet As Object Dim Cell As Object Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets(0) Cell = Sheet.getCellByPosition(1,1) 'Cell "B2" (0 ベース!) Cell.Value = 1000 With com.sun.star.table.CellContentType Select Case Cell.Type Case .EMPTY MsgBox "内容: 空" Case .VALUE MsgBox "内容: 値" Case .TEXT MsgBox "内容: テキスト" Case .FORMULA MsgBox "内容: 数式" End Select End With
注意: With 構文は、完全に Select 構文の外側でなければなりません。
Content on this page is licensed under the Public Documentation License (PDL). |