
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を表せない)
のも無理なようだし、ほとほと困り果てています。
拙い説明で恐縮ですが、私の考えを実装することは可能でしょうか。
または別の方法はあるでしょうか。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
定数をやめて
配列変数にする!(ぉ
以下は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
don_goさんのほうに書きましたがリソースファイルを使えなかったので
こちらの方法を採用することにしました。
別プロシージャに定数をづらづらと書いて初期化で配列に代入するとは
目から鱗です。
定数と変数を合わせてメッセージを出力する必要がでてきたのですが
(ERRORS(10) = "値: " & str1 & "は大きすぎます" のように)
この方法で実装することができました。
ありがとうございました!
No.4
- 回答日時:
捕捉
Replace()コマンドを併用する場合
hoge.res の 1010 に
"@を入力して下さい。"
を登録しておく。
MsgBox Repalce(LoadResString(1010), "@", "○○コード")
↑で、"○○コードを入力して下さい。"を出力
No.3
- 回答日時:
LoadResString() コマンドでリソースファイル(.res)に
登録した番号に対応する文字列を取得できます。
例)
MsgBox LoadResString(1000)
#リソースファイルを変更する事により他国語対応も可能です。
丁寧にありがとうございました。
この方法がスマートでいいかなと思ったのですが
私の環境のVB6.0のアドインにリソースエディタがなく(!)
時間もないので実装には至りませんでした。残念です。
しかし、.RESファイルは何かなと思ったままずっと放置していたので
調べているちにいろいろと勉強になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
Excel vbaについての質問
-
【VBA】ワークブックを開く時に...
-
実行時エラー'-2147467259(8000...
-
String""から型'Double'への変...
-
レコード登録時に「演算子があ...
-
VB6とVB.NETでNullの扱いが違う?
-
【Access】Excelインポート時に...
-
ApplicationとWorksheetFunctio...
-
UBoundに配列がありませんとエ...
-
pythonのopenpyxlについて
-
文字列内で括弧を使うには
-
ActiveCell.FormulaR1C1の変数
-
演算子が DBnull 及び integer...
-
エクセルVBAで埋め込みグラフ(C...
-
【VBAエラー】Nextに対するFor...
-
.VBSだとADODBのプロバイダが見...
-
VB.net 重複チェックがしたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
マクロで"#N/A"のエラー行を削...
-
文字列内で括弧を使うには
-
String""から型'Double'への変...
-
【Access】Excelインポート時に...
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
ACCESSで値を代入できないとは?
-
VBA エクセル で FIND でのエラ...
-
Filter関数を用いた結果、何も...
-
レコード登録時に「演算子があ...
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
「実行時エラー '3167' レコー...
おすすめ情報