[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/05(Fri) 11:08
投稿者名:まさ
URL :
タイトル:
エラー表示
お世話になってます。

テキストファイルを読込みボタンを押して読み込み、ソートするボタンを押すことで、読み込まれたデータを
ソートして別のフォームに表示するプログラムを作っています。
そこでなんですが、まだ読込みボタンを押されてない状態で、ソートボタンを押した際に、
「読込みボタンを押してください」というエラーメッセージを表示したいのですが。
MsgBoxを使ってやってみたのですが、上手く出来ませんでした。

ご教授お願いします!

投稿時間:2005/08/05(Fri) 12:38
投稿者名:nobu
Eメール:
URL :
タイトル:
Re: エラー表示
今回の質問に関係するコードを提示して見て下さい。

投稿時間:2005/08/05(Fri) 13:05
投稿者名:まさ
URL :
タイトル:
Re^2: エラー表示
> 今回の質問に関係するコードを提示して見て下さい。
その、エラーメッセージを表示したい箇所のコードってことでしょうか??

投稿時間:2005/08/05(Fri) 14:59
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^3: エラー表示
> > 今回の質問に関係するコードを提示して見て下さい。
> その、エラーメッセージを表示したい箇所のコードってことでしょうか??

どのようなコードを書いていて、どう上手く出来ていないのかが
回答者には分からないから、提示して下さいという事ですけどね...

Load時にソートボタン.Enabled = False としておき、
読込ボタンをクリックされら、ソートボタン.Enabled = True
とかじゃダメ?

投稿時間:2005/08/05(Fri) 15:55
投稿者名:まさ
URL :
タイトル:
Re^4: エラー表示
返答ありがとうございます。


Option Explicit

Private Sub Read_Click() '---テキストデータを読み込む
        
    On Error GoTo ErrHandler '---エラーを表示する
    

    Dim FName As String   '---ファイル名を格納する変数
    Dim Out As Variant '---ファイルデータを一時格納する変数
    
    List1.Clear
    FName = File.Text
    num = 0
    num2 = 0
    Open FName For Input As #1  '---ファイル名を指定して、Inputで#1のファイルを開く
        Do Until EOF(1)             '---ファイルの末になるまで繰り返す
            Line Input #1, Out      '---1行分読み込んで格納する
            ID = Left(Out, 8)      '店舗コードの習得
            Money = Right(Out, 8)  '売上のところを切り取り
            
            'カンマ編集と右詰め編集
            Money = Format(Format(Money, "###,###,##0"), "@@@@@@@@@@@")
            List1.AddItem ID & ":" & Money  '店舗コードと売上を表示
          
            ArrayID(num) = ID           '配列変数に代入(店舗)
            num = num + 1            '店舗の加算
            ArrayMoney(num2) = Money  '配列変数に代入(売上)
            num2 = num2 + 1         '売上の加算
        Loop
    Close #1
    
    Tenpo.Caption = num & "店舗"    '店舗数を表示
    Exit Sub
    
    
ErrHandler:
    MsgBox Err.Description, vbCritical
End Sub

Private Sub Top_Click()

     On Error GoTo ErrHandler '---エラーを表示する
    
        Dim i As Variant    'カウンタ変数
        Dim j As Variant    'カウンタ変数
        Form2.Result.Clear '結果表示場所をクリアする
        
        
                For i = 0 To num - 1                            '順番を決定する位置
                    For j = i + 1 To 11                         '比較をする配列のインデックス
                        If ArrayMoney(i) < ArrayMoney(j) Then '売上を比較し、入れ替えをする
                            SMoney = ArrayMoney(i)
                            ArrayMoney(i) = ArrayMoney(j)
                            ArrayMoney(j) = SMoney
                            SID = ArrayID(i)
                            ArrayID(i) = ArrayID(j)
                            ArrayID(j) = SID
                        End If
                    Next j
                    If i < 10 Then
                    Form2.Result.AddItem ArrayID(i) & ": " & ArrayMoney(i)  '結果を表示する
                    End If
                Next i
                
        Form2.Koumoku.Caption = "トップ10"   'ラベルを表示する
        Form2.Show                         'Form2を表示する
        Form1.Hide                         'Form1を非表示にする
        Exit Sub
                        
ErrHandler:
    MsgBox Err.Description, vbCritical
End Sub

いまあるコードはこんな感じなんですが、このコードの中で、ソート(top)ボタンをファイルの読込みボタンを
押す前に押下したときに、"読込みボタンを押してください" というエラーメッセージを表示させたいんです。
ただ、どのような処理のコードを記述したら、エラーメッセージを表示できるのかが悩んでいる所です。

投稿時間:2005/08/05(Fri) 16:23
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^5: エラー表示
全部載せる必要は無かったんですけどね(^^;)

未読込=リストボックスにデータが無いという前提であればですが...
読込ファイルの中が空の場合は、メッセージの意味が違ってしまいますね。

> Private Sub Top_Click()
>
>      On Error GoTo ErrHandler '---エラーを表示する
>      
>         Dim i As Variant    'カウンタ変数
>         Dim j As Variant    'カウンタ変数

          If List1.ListCount = 0 Then
              MsgBox "読込ボタンを押してください。",VbInformation,""
              Exit Sub
          End If

>         Form2.Result.Clear '結果表示場所をクリアする

投稿時間:2005/08/05(Fri) 17:28
投稿者名:まさ
URL :
タイトル:
Re^6: エラー表示
無事表示できました、ありがとうございます。
あと、もう1つ質問いいですか?
エラーメッセージを押したあとにForm2が表示されるのを非表示にしたいのですが・・・。

投稿時間:2005/08/05(Fri) 18:33
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^7: エラー表示
> エラーメッセージを押したあとにForm2が表示されるのを非表示にしたいのですが・・・。

考えられる理由は...
1)Form2.Show よりも後にMsgBoxを書いている
2)Exit Sub が抜けている
3)戻り値を使用したMsgBoxの場合、戻り値が間違っている

上記のいずれでもない場合、
私もスペシャリストではないので原因はわかりません。

投稿時間:2005/08/07(Sun) 22:04
投稿者名:まさ
URL :
タイトル:
ありがとうございます
すいません、パソコンが調子悪くてやっと掲示板みれました。
とても抽象的な質問をしたのに考えてくださってありがとうございました。
さっそく原因を確認してみたいと思います。

投稿時間:2005/08/09(Tue) 07:11
投稿者名:まさ
URL :
タイトル:
解決しました。あともう1点・・・
ありがとうございました、エラー表示の件は無事解決しました。
本当に毎回助けていただいて大感謝です。
そしてまた、1つ教えていただきたいことが・・・。
テキストファイルの中にあるデータ(0000000110000000/前8桁→ID、後8桁→売り上げ)が全角ではな
く半角であること、そしてそれが0から9までの数字であることを確認してから表示をしたいのです
が。ご教授よろしくお願いします。

Option Explicit

Public ArrayMoney(12) As Long
Public ArrayID(12) As Long
Public num As Integer
Public num2 As Integer
Public Money As Long
Public ID As Long
Public SMoney As Long
Public SID As Long


Private Sub Read_Click() '---テキストデータを読み込む

    On Error GoTo ErrHandler '---エラーを表示する


    Dim FName As String   '---ファイル名を格納する変数
    Dim Out As String '---ファイルデータを一時格納する変数

    List1.Clear
    Sale.Text = ""
    LClear

    FName = File.Text
    num = 0
    num2 = 0

    Open FName For Input As #1  '---ファイル名を指定して、Inputで#1のファイルを開く
        Do Until EOF(1)             '---ファイルの末になるまで繰り返す
            Line Input #1, Out      '---1行分読み込んで格納する
            ID = Left(Out, 8)      '店舗コードの習得
            Money = Right(Out, 8) '売上のところを切り取り


            'カンマ編集と右詰め編集
            Money = Format(Format(Money, "###,###,##0"), "@@@@@@@@@@@")
            List1.AddItem ID & ":" & Money  '店舗コードと売上を表示

            ArrayID(num) = ID           '配列変数に代入(店舗)
            num = num + 1            '店舗の加算
            ArrayMoney(num2) = Money  '配列変数に代入(売上)
            num2 = num2 + 1         '売上の加算

        Loop
    Close #1

    Tenpo.Caption = num & "店舗"    '店舗数を表示
    Exit Sub


ErrHandler:
    MsgBox Err.Description, vbCritical
    Close #1
End Sub

投稿時間:2005/08/09(Tue) 09:38
投稿者名:黒影
Eメール:
URL :
タイトル:
Re: 解決しました。あともう1点・・・
> ありがとうございました、エラー表示の件は無事解決しました。
> 本当に毎回助けていただいて大感謝です。

何処がいけなかったのでしょう?
どのように解決したのか報告するのも、大切です。

> そしてまた、1つ教えていただきたいことが・・・。
> テキストファイルの中にあるデータ(0000000110000000/前8桁→ID、後8桁→売り上げ)が全角ではな
> く半角であること、そしてそれが0から9までの数字であることを確認してから表示をしたいのです
> が。ご教授よろしくお願いします。

質問の内容が変わる時は、新規にスレッドを立てるようにしましょう。

また、自分なりに調べてみましたか?
「vb 半角 全角 チェック」でググると一杯出てきますが...

投稿時間:2005/09/07(Wed) 14:48
投稿者名:まさ
URL :
タイトル:
お礼と報告
すいません、いろいろ事情がありまして、お礼と報告が1ヶ月後になってしまいました。
この問題を解決するのに、次のようなFunctionを作ることで解決しましたので報告です。

Public Function IsTByte(Value As String) As Boolean  '全角・半角チェックをする関数

    Dim LetterCount As Long        '文字列の文字数
    Dim ByteCount As Long            '文字列のバイト数

    LetterCount = Len(Value) '文字数の確認

    ByteCount = LenB(StrConv(Value, vbFromUnicode))  'バイト数の確認

    If LetterCount <> ByteCount Then IsTByte = True  '半角文字列(文字数=バイト数)

End Function

> 何処がいけなかったのでしょう?
> どのように解決したのか報告するのも、大切です。
自己解決で満足してしまっていました。
どこがいけなかったのかというと、プログラム内で GoTO文でのエラー処理を行っていたのですが、
同じエラー処理に間違えて2箇所もGoTo文があったため、2つ共のエラーが表示されていました。
なので、1つ消すという凡ミスでした。(^_^;)

黒影さん、本当に遅くなりましたが、ご教授ありがとうございました。

投稿時間:2005/08/05(Fri) 14:22
投稿者名:KG
Eメール:
URL :
タイトル:
Re: エラー表示
MsgBoxの戻り値を利用すると良いかと思います。
戻り値については、ヘルプにのっています :)

投稿時間:2005/08/05(Fri) 15:47
投稿者名:まさ
URL :
タイトル:
Re^2: エラー表示
返答ありがとうございます。
MsgBoxの使い方はわかりました。ただ、どうコード記述をしたら、処理がうまく進むのかが・・・
> MsgBoxの戻り値を利用すると良いかと思います。
> 戻り値については、ヘルプにのっています :)

投稿時間:2005/08/05(Fri) 23:17
投稿者名:ぶぶ
Eメール:
URL :
タイトル:
Re^3: エラー表示
> 返答ありがとうございます。
> MsgBoxの使い方はわかりました。ただ、どうコード記述をしたら、処理がうまく進むのかが・・・
> > MsgBoxの戻り値を利用すると良いかと思います。
> > 戻り値については、ヘルプにのっています :)
ヘルプに使用例も載っていますので、それをご覧になって、
どこがわからないのか書いてください。
戻り値を利用した例もあります。

投稿時間:2005/08/07(Sun) 22:08
投稿者名:まさ
URL :
タイトル:
Re^4: エラー表示
書き込みが遅くなってすいません、パソコンの調子が悪かったので・・・。
とりあえず、ヘルプで再確認をして、何を質問したいのか
まとめて書き込みたいと思います。
その際は、再度ご教授よろしくお願いします。

> > 返答ありがとうございます。
> > MsgBoxの使い方はわかりました。ただ、どうコード記述をしたら、処理がうまく進むのかが・・・
> > > MsgBoxの戻り値を利用すると良いかと思います。
> > > 戻り値については、ヘルプにのっています :)
> ヘルプに使用例も載っていますので、それをご覧になって、
> どこがわからないのか書いてください。
> 戻り値を利用した例もあります。

投稿時間:2005/08/09(Tue) 07:13
投稿者名:まさ
URL :
タイトル:
解決しました。
エラー表示の件、無事解決しました!
ありがとうございました!