■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#5768-0RE(消えた)#21:クラスから値を返す匿名57682002-03-07(木) 19:27
#5768-0
RE(消えた)#21:クラスから値を返す
昨日投稿したものが消えてしまったので、再投稿します。

また、レスをつけてくれた藤代千尋さん、ありがとうございます。
二者択一とのことですので、他の要因とも絡めて決めたいと
思います。


||番号||#25
||題名||RE#21:クラスから値を返す
||ホームページ||
||メール||iamcf@sol.dti.ne.jp
||投稿者||藤代千尋
||投稿日||2002年3月6日(水)21:07
||レス元||#21
||内容||
> Err.Raiseを使うとなぜ戻り値が返らない(Empty値)のか
> よくわかりません。「エラーが起きているため、戻り値なし」
> という動きになっているのですか?
> この場合、(クライアントでではなく)クラスから999は
> 戻せないのでしょうか。

戻せません。(-_-;)

正確なことは分かりませんが、Err.Raise を使っても、戻り値は返っていると思われます。
しかし、エラーが発生すると、その時点で、コードの実行は中断されます。つまり、代入の
方が行われないのです。
    i = c1.j(10)
     ^^^ エラーにより、このイコールの部分が実行されない。

やりたいことは、無効な値とエラー番号の2つを返したいわけですが、それは出来ないわけ
です。どちらかにしぼる必要があります。

でもその前に、「エラー番号を返したい」のか「エラーを発生させたいのか」をハッキリさ
せましょう。エラーを発生させるのなら、無効な値は返せません。代入が行われませんから、
はじめから、その変数に無効な値をセットしておくなどが必要でしょう。

エラー番号を返したいのなら、エラー番号を返す別のプロパティをクラスに実装する方法を
お勧めします。(^_^)
Private m_LastErrNumber As Long
Public Function j(a As Integer) As Integer
    On Error GoTo ErrHandle
    j = a + "a"

    Exit Function
ErrHandle:
    j = 999
    m_LastErrNumber = 1000
End Function

Public Property Get LastErrNumber() As Long
    LastErrNumber = m_LastErrNumber
End Property


||番号||#21
||題名||クラスから値を返す
||ホームページ||
||メール||
||投稿者||匿名21
||投稿日||2002年3月6日(水)18:24
||レス元||
||内容||
以下の動きの違いに関して教えて下さい。
簡単なcommand buttonとクラスを作成します。
クラス(Class1)は戻り値を持つメソッド(j)だけです。
プロジェクト1とプロジェクト2の違いは、クラスから
Err.Raiseを使っているかどうかだけです。

●プロジェクト1

'クライアントインターフェース
Private Sub Command1_Click()
    Dim c1 As Class1
    Set c1 = New Class1
    Dim i
    i = c1.j(10)
    Debug.Print i    'クラスから999が戻る
End Sub

'クラスモジュール
Public Function j(a As Integer) As Integer
    On Error GoTo err
    j = a + "a"
exit Function    
err:
    j = 999     'エラーの場合は999を戻す
End Function


●プロジェクト2

'クライアントインターフェース
Private Sub Command1_Click()
    On Error GoTo err
    Dim c1 As Class1
    Set c1 = New Class1
    Dim i
    i = c1.j(10)
    Debug.Print i    'Empty値になる(999は戻らない)
Exit Sub
err:
    If err.Number = vbObjectError + 1000 Then
        Resume Next
    End If
End Sub

'クラスモジュール
Public Function j(a As Integer) As Integer
    On Error GoTo err
    j = a + "a"
    Debug.Print j
Exit Function
err:
    j = 999
    err.Raise vbObjectError + 1000   'エラー番号と999を戻したい
End Function

Err.Raiseを使うとなぜ戻り値が返らない(Empty値)のか
よくわかりません。「エラーが起きているため、戻り値なし」
という動きになっているのですか?
この場合、(クライアントでではなく)クラスから999は
戻せないのでしょうか。


教えて下さい。
このページと関連する記事:
#21-5クラスから値を返す2002-03-06(水) 09:24
#21-2クラスから値を返す2002-03-06(水) 18:24
#16202-0ファンクションで複数の戻り値を返す方法は?2001-05-21(月) 16:25
#24321-0コモンダイアグラムのキャンセル2000-06-27(火) 12:37
#12609-0トラップがかからない2000-01-04(火) 13:48
#33629-0エラーが発生した行番号の取得方法2000-11-17(金) 10:45
#16896-0Dir関数2001-07-13(金) 17:00
#20073-0エラー発生時にもクラスの、メソッドの戻り値を得るには?2002-03-06(水) 15:59
#17708-0Msgbox関数の書式2001-09-11(火) 16:49
#34109-0次の画面を表示するときの初期表示でOn Errorでおちてしまう。2000-11-25(土) 23:35
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)