重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Visual Basic(VB)6.0 です。フォームのTextなど各種入力の状態をチェックして、
不正なら該当する(ユーザ向けの)エラーメッセージを
フォームのLabelに表示する処理を書いています。
エラーメッセージは20~30程度になり、全て定数Const文で持たせました。

随時発生する入力チェックの処理の度に、エラーならLabelのCaptionの表示を
変える処理を書くのはスマートではないと思ったので、
Label表示変更専用のモジュールを作ろうと考えました。
引数に(ユーザ定義の)コードを渡して、対応する定数のエラーメッセージを
判定・表示させる処理を書こうと思ったのですが、ここでうまくいきません。
以下、簡単なコードです。

------------------------------------------------------
'* 定数です *
Public Const ERR1 = "エラー1です"
Public Const ERR2 = "エラー2です"
Public Const ERR1 = "エラー3です"
Public Const ERR2 = "エラー4です"
'-----中略-----
Public Const ERR50 = "エラー30です"
-------------------------------------------------------
'** メイン処理です。**
Sub main()
Dim i As Integer

'フォームの入力をチェックします
i = Chk_Value(dummy)
If i > 0 Then
'0より大きかったらエラーコードとして引数を渡します
Call Disp_Msg(i)
Exit Sub
End If

End Sub

-------------------------------------------------------
'入力チェック処理です
Private Function Chk_Value(ByVal dummy As Integer) As Integer

'空白だったらエラーなので1を返します
If Text1.Text = "" Then
Chk_Value = 1
End If

End Function

-------------------------------------------------------
'メッセージ表示処理です
Private Sub Disp_Msg(ByVal ecd As Integer)

'分からない!
'引数で1を受け取り、定数のERR1を表示したい
'引数で2を受け取ったら、定数のERR2を表示したい

End Sub

-------------------------------------------------------

列挙型やType型変数もよい使い方が思いつかず、
ループで回して配列に格納しようにも、変数と変数を組み合わせて
変数を作る(wErr = "ERR" & i と書いても定数ERR1を表せない)
のも無理なようだし、ほとほと困り果てています。
拙い説明で恐縮ですが、私の考えを実装することは可能でしょうか。
または別の方法はあるでしょうか。

よろしくお願いします。

A 回答 (4件)

定数をやめて


配列変数にする!(ぉ

以下はVBAによるコードである。
UserForm1にはCommandButton1とTextBox1が貼り付けられている。
static initializerのようなものがVB6にあるかどうかわからんので
標準モジュールにベタ書きしている。

'========UserForm1=======
Option Explicit

Private Sub CommandButton1_Click()
Dim a As Integer

a = ErrorCheck(TextBox1.Text)
If a > 0 Then

DisplayError (a)

End If



End Sub

'======標準モジュールModule1=========
Option Explicit

Public Errors(50) As String

Public Function ErrorCheck(hoge As String) As Integer
Dim a As Integer

a = CInt(hoge)

If a < 0 Then

ErrorCheck = 1

ElseIf a > 100 Then

ErrorCheck = 2

Else

ErrorCheck = 0

End If


End Function

Public Sub DisplayError(hoge As Integer)

Initialize

MsgBox (Errors(hoge))





End Sub

Public Sub Initialize()

Errors(0) = "エラーではありません"
Errors(1) = "値は正でなければなりません"
Errors(2) = "値は100未満でなければなりません"

End Sub
    • good
    • 0
この回答へのお礼

don_goさんのほうに書きましたがリソースファイルを使えなかったので
こちらの方法を採用することにしました。
別プロシージャに定数をづらづらと書いて初期化で配列に代入するとは
目から鱗です。
定数と変数を合わせてメッセージを出力する必要がでてきたのですが
(ERRORS(10) = "値: " & str1 & "は大きすぎます" のように)
この方法で実装することができました。
ありがとうございました!

お礼日時:2007/07/03 22:23

捕捉


Replace()コマンドを併用する場合

hoge.res の 1010 に
"@を入力して下さい。"
を登録しておく。

MsgBox Repalce(LoadResString(1010), "@", "○○コード")
↑で、"○○コードを入力して下さい。"を出力
    • good
    • 0

LoadResString() コマンドでリソースファイル(.res)に


登録した番号に対応する文字列を取得できます。
例)
MsgBox LoadResString(1000)

#リソースファイルを変更する事により他国語対応も可能です。
    • good
    • 0
この回答へのお礼

丁寧にありがとうございました。
この方法がスマートでいいかなと思ったのですが
私の環境のVB6.0のアドインにリソースエディタがなく(!)
時間もないので実装には至りませんでした。残念です。

しかし、.RESファイルは何かなと思ったままずっと放置していたので
調べているちにいろいろと勉強になりました。
ありがとうございました。

お礼日時:2007/07/03 22:15

あ、追記


#1のコードはボタンを押した時、TextBox1.textが数字で無かった場合、VB側からエラーが出されます(CIntが失敗)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!