SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

VB 入門編6 - 関数構造、function、sub、組み込み標準関数、エラートラップ

■関数構造

  ・自分で関数がうまく作れないとパソコン系の言語では開発効率が悪い。
    VB の関数は、戻り値のあるものとないものとで、少し構文が違う。
    戻り値のないものは sub で定義し、戻り値のあるものは function で定義
    する。関数はできるだけグローバル変数の参照をしない方が良い。
    必要なデータは、引数(パラメタ) で関数に渡す。

■function 関数

  ・戻り値のある関数は function で、次のように定義する。
    function からのの脱出には、exit function を使用することができる。
    関数を標準モジュール(コードモジュール .bas) で、public 宣言すると、
    どこからも呼べるグローバル関数になる。
    (グローバルファンクション、グローバルプロシージャ)
    private 宣言された関数は、そのモジュール内でのみ呼べる。
    (ローカルファンクション、ローカルプロシージャ)
    クラスモジュールで public 宣言すると、VB6 DLL として関数参照できるよ
    うになる。

  msgbox test(10, 20)

public function test(a as long, b as long) as long

  dim i as long

  i = a + b
  test = i

end function

  ・VB の引数は、アドレス渡しが標準なので、更新して返すことができる。

  dim s as string
  dim rcd as boolean

  rcd = test(255, s)
  if rcd then
    msgbox s
  else
    msgbox "エラー"
  end if

public function test(a as long, s as string) as boolean

  test = false

  on error resume next
  s = hex(a)
  if err <> 0 then exit function
  on error goto 0

  test = true

end function

  ・VB の function は、戻り値を引き取らずに呼ぶこともできる。
    この場合は、sub と同じ書式で呼ぶ

  dim s as string

  test 255, s
  msgbox s

  ・C 言語と違い文字列を戻り値に返すこともできる。

  msgbox test(255)

public function test(a as long) as string

  dim s as string

  test = ""

  on error resume next
  s = hex(a)
  if err <> 0 then exit function
  on error goto 0

  test = s

end function

■sub 関数

  ・戻り値のない関数は sub で、次のように定義する。
    sub からのの脱出には、exit sub を使用することができる。
    関数を標準モジュール(コードモジュール .bas) で、public 宣言すると、
    どこからも呼べるグローバル関数になる。
    private 宣言された関数は、そのモジュール内でのみ呼べる。
    クラスモジュールで public 宣言すると、VB6 DLL として関数参照できるよ
    うになる。

  dim i as long

  test 10, 20, i
  msgbox i

public sub test(a as long, b as long, c as long)

  dim i as long

  i = a + b
  c = i

end sub

■引数省略指定(Optional)

  ・function、sub のパラメタ省略値の指定をするには、次のようにする。
    (可変引数、可変個引数)

public function test(a as long, Optional b as long = 100) as long
  ...
end function

  ・パラメタ省略時のデフォルト値を指定しない場合は、次のようにする。

public function test(a as long, Optional b as long) as long
  if IsMissing(b) then
    'b が省略されて呼ばれた場合
  end if
  ...
end function

■汎用配列引数

  ・配列変数を引数とする場合、どのような型でも渡すには通常の書き方では
    エラーになる。↓ エラーの例

  dim a(10) as long
  dim rcd as long

  rcd = test(a())

public function test(a() as variant) as long
  ...
end function

  ・次のように引数指定するとエラーにならない。↓

  dim a(10) as long
  dim rcd as long

  rcd = test(a())  'rcd = test(a) と書いても OK

public function test(a as variant) as long
  ...
end function

  ・検証したコード。↓

  Dim n(10) As Long
  Dim a(10) As String
  Dim i As Long

  n(0) = 1
  a(0) = "a"
  test n()
  test a()
  test n
  test a

public Sub test(x As Variant)
  Print UBound(x)
  Print x(0)
End Sub

■関連資料

  ・関数構造の詳細は、次の資料を参照のこと。

    VB 基礎編 (その五) 関数構造(sub、function)

  ・組み込み標準関数の詳細は、次の資料を参照のこと。

    VB 基礎編 (その六) 文字列操作
    VB 基礎編 (その七) 数値関数
    VB 基礎編 (その八) その他ステートメント、関数
    VB ビジュアル編 (その八) その他ステートメント、関数

■エラートラップ

  ・細かなエラー制御を行う場合は、on error resume next を使用する。
    err コードは、on error goto 0 でリセットされ、エラートラップも解除さ
    れる。正常終了は err = 0 である。
    尚、VB6 の err は long 型なので注意する。
    また、一度エラーが発生すると、err はそのエラーコードをリセットされる
    まで保持する。従って、エラートラップ中にエラーリセットを行いたい場合
    は、err = 0 を実行する。
    尚、error にエラーメッセージがセットされている。

'** エラートラップ開始
  on error resume next

'** 処理1
  ... コード ...

'** エラーチェック
  if err <> 0 then msgbox "処理1 エラー"

'** エラーリセット
  err = 0

'** 処理2
  ... コード ...

'** エラーチェック
  if err <> 0 then msgbox "処理2 エラー"

'** エラートラップ解除
  on error goto 0

■実行時エラー生成

  ・実行時エラーを生成して、例外を発生されるには、次のようにする。
    現実的には、この手の例外で落ちまくるプログラムは見栄えが悪いし、
    もっと他の対処をした方が良いように思う。

  err.Raise vbObjectError + 1, "test.exe", "エラーメッセージ"
            |                   |           |_ エラーメッセージ
            |                   |_ モジュール名やプログラム名
            |_ err コード
               vbObjectError までが VB のシステムエラー

  MsgBox Err.Number       'エラーコード
  MsgBox Err.Description  'エラーメッセージ

■RaiseEvent

  ・モジュールレベルで宣言されたイベントを通知する。
    いまひとつ利用価値がわからん。(^^;
    WithEvents と組み合わせて使うらしい。

public Event eventproc(para1 as long)

  RaiseEvent eventproc(-100)

■その他資料

    VB 基礎編 (その四) 標準ファイル I/O
    ファイルシステムオブジェクト

■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK