2016-05-18 6 views
0

私は、さまざまなメッセージを入れるメッセージ関数を定義しました。つまり、フォームでこの関数を呼び出すと、対応する選択されたメッセージだけが画面に表示されます。ここに私の例:VBAの配列から値を返す

'Thats the message sub 
Public Sub MsgString(txtNo As Byte) 
    MsgBox MsgTxt(txtNo) 
End Sub 

'Thats the message function to return the corresponding value, which is chosen 
Private Function MsgTxt(txtNo As Byte) As String 
    Dim arrMsgTxt() As Variant 
    arrMsgTxt = Array("error message number one", "error message number two", "error message number three") 

    For txtNo = LBound(arrMsgTxt) To UBound(arrMsgTxt) 
      MsgTxt = arrMsgTxt(txtNo) 
      Exit Function 
    Next txtNo 
End Function 

は、それを解決する良い方法はありますか?現在、インスタンス化された値の後に関数を終了する必要があります。

+0

なぜ期待............デフォルトのインデックスは、ゼロベースで、覚えておいてください使用したいメッセージのどれを知っていれば(おそらくtxtNoの値で)、エラーメッセージの配列をループする必要がありますか? Exit関数と共にForとNext行を削除し、機能に変更を加えることはできません – Dave

+0

@Daveはい、変数 'txtNo'に配列の番号が入ります。あなたはより良い解決策を考えていますか? – yuro

+0

ゲイリーの学生の答えを参照してください... – Dave

答えて

2

インデックスをUDFに渡す通常の方法です。そうすれば、あなたはループを必要としません:

Public Function TellMe(indx as Long) as String 
    ary = Array("Mike", "James", "Paul", "William") 
    TellMe = ary(indx) 
End Function 

Sub MAIN() 
    MsgBox TellMe(2) 
End Sub 

ので、「ポール」

+0

ありがとうございます。私は前に定義したが、奇妙なエラーメッセージが表示されましたが、今は動作します:) – yuro

+0

@yuroフィードバックに感謝します! –

関連する問題