Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11796 / 13646 ツリー ←次へ | 前へ→

【14095】エラー回避について miran 04/5/20(木) 21:12 質問[未読]
【14096】Re:エラー回避について Asaki 04/5/20(木) 22:00 回答[未読]
【14098】Re:エラー回避について miran 04/5/20(木) 22:13 発言[未読]
【14100】Re:エラー回避について Asaki 04/5/20(木) 22:19 回答[未読]
【14103】Re:エラー回避について miran 04/5/20(木) 22:34 発言[未読]
【14104】Re:エラー回避について Asaki 04/5/20(木) 22:37 回答[未読]
【14105】Re:エラー回避について miran 04/5/20(木) 22:48 質問[未読]
【14106】Re:エラー回避について Asaki 04/5/20(木) 22:56 回答[未読]
【14107】Re:エラー回避について miran 04/5/20(木) 23:05 発言[未読]
【14110】Re:エラー回避について Asaki 04/5/20(木) 23:11 回答[未読]
【14109】Re:エラー回避について Asaki 04/5/20(木) 23:06 回答[未読]
【14112】Re:エラー回避について miran 04/5/20(木) 23:22 お礼[未読]
【14108】Re:エラー回避について ちゃっぴ 04/5/20(木) 23:06 回答[未読]
【14101】Re:エラー回避について ちゃっぴ 04/5/20(木) 22:21 回答[未読]
【14102】Re:エラー回避について ちゃっぴ 04/5/20(木) 22:23 発言[未読]
【14111】Re:エラー回避について ちゃっぴ 04/5/20(木) 23:18 発言[未読]
【14113】Re:エラー回避について Asaki 04/5/20(木) 23:23 発言[未読]
【14114】Re:エラー回避について ちゃっぴ 04/5/20(木) 23:37 発言[未読]

【14095】エラー回避について
質問  miran  - 04/5/20(木) 21:12 -

引用なし
パスワード
   はじめて投稿させていただきます。
今、会社で在庫管理のプログラムをVBAで作っているのですがデバックが出ないようにエラー回避を設定しているのですが逆にそれが原因でエラー回避をした後の数量を入れるというプログラムが行われないのですがどうしたらいいのでしょうか?
日付と商品名が合ったところに個数を入れるというプログラムです。
エラー回避は日付が00/00/00の形式で入力されないときの処理。
数量がもし数字以外の文字などが入った場合(このエラー回避も行われないです)の二つのエラー回避を行っています。
どなたか分かる方教えてください。お願いいたします。

【14096】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 22:00 -

引用なし
パスワード
   こんばんは。

コードを見せていただかないと、なにも解らないと思いますが。。。

【14098】Re:エラー回避について
発言  miran  - 04/5/20(木) 22:13 -

引用なし
パスワード
   >コードを見せていただかないと、なにも解らないと思いますが。。。


コードはこれになります。分析お願いいたします。


Private Sub CommandButton1_Click()
  If ListBox1.ListIndex < 0 Then
    MsgBox "商品が選択されていません", vbCritical, "商品選択エラー"
  End If
   If TextBox2.Text = "" Then
    TextBox2.SetFocus
    MsgBox "数量を入力してください", vbCritical, "数量未入エラー"
  End If
  On Error GoTo trap1
  
  If TextBox1.Text = Date Then
  
    ElseIf CByte(Right(TextBox1.Text, 2)) >= 32 Then
      MsgBox "32以上の日付になっています。", vbExclamation, "日付エラー1"
      TextBox1.SetFocus
    Else
      HIZUKE = CByte(Right(TextBox1.Text, 2))
    End If
  
  Exit Sub
  On Error GoTo trap2
    KOSU = TextBox2.Text
Exit Sub
trap1:
    MsgBox "日付が認識されません。再入力してくい。", _
     vbExclamation, "日付エラー2"
    TextBox1.SetFocus
Exit Sub

ここからが処理されません。
trap2:
    MsgBox "数字を入力してください。", vbCritical, "入力エラー"
    TextBox2.Text = ""
    TextBox2.SetFocus
On Error GoTo 0
  If OptionButton1.Value = True Then
    TATE = ListBox1.ListIndex + 4
   
  ElseIf OptionButton2.Value = True Then
    TATE = ListBox1.ListIndex + 15
    
  ElseIf OptionButton3.Value = True Then
    TATE = ListBox1.ListIndex + 24
  End If
  If Right(TextBox1.Text, 2) <= 15 Then
    YOKO = CByte(Right(TextBox1.Text, 2)) + 5
   Else
    YOKO = CByte(Right(TextBox1.Text, 2)) + 6
  End If
   KOSU = TextBox2.Text
  If Cells(TATE, YOKO) = "" Then
    Cells(TATE, YOKO) = "=" & KOSU
  Else
    Cells(TATE, YOKO) = Cells(TATE, YOKO) + KOSU
  End If
End Sub

【14100】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 22:19 -

引用なし
パスワード
   あちこちで
>Exit Sub
してるのが、とっても怪しいですが。

先頭行にブレークポイントを設定して、F8キーでステップ実行して、実際に、
どのような流れでプログラムが動いているのかを確認されては?

また、If文のインデント位置をそろえたほうが、不具合も発見しやすいです。

【14101】Re:エラー回避について
回答  ちゃっぴ E-MAIL  - 04/5/20(木) 22:21 -

引用なし
パスワード
   エラートラップ部分以外になぜ2つも「Exit Sub」があるのでしょう?

ちなみにこの手のデバックはステップ実行してみれば簡単にわかると思います。
出来るだけ、自力で解決するよう心がけましょう!

【14102】Re:エラー回避について
発言  ちゃっぴ E-MAIL  - 04/5/20(木) 22:23 -

引用なし
パスワード
   asakiさんとかぶってしまいました。
ヾ(^-^;) ゴメンゴメン

【14103】Re:エラー回避について
発言  miran  - 04/5/20(木) 22:34 -

引用なし
パスワード
   ブレークポイントというのは茶色くさせることでしょうか?
ほとんど独学で作っているのでどんな操作であるのか分かりません。

行間やifに関してはちゃんと空けています。
プログラムが長かったのでつめているだけでした。みにくくなってしまってすみません。

【14104】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 22:37 -

引用なし
パスワード
   >ブレークポイントというのは茶色くさせることでしょうか?
そうです。
その状態にしておいて、普通通り、プログラムを実行します。
で、ブレークポイントを設定した行で、プログラムの実行がStopしますから、
ここからF8キーを押して、1行ずつ実行させてみます。

Exit Sub って、ほんとにその関数を終わらせる、ってことですから。。。

【14105】Re:エラー回避について
質問  miran  - 04/5/20(木) 22:48 -

引用なし
パスワード
   trap1の前だけにexit subをおいて実行しましたがやはりセルに数量が入力されません。どの位置にexit sub をおけばいいの分かりません。
またexit sub をおかないとちゃんと入力されているのにmsgboxが表示されます。
エラーチェックをするというボタンと数量を入れるというボタンに分けるとちゃんと実行されるのに、なぜ一緒にするとうまく実行されないのですか?

【14106】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 22:56 -

引用なし
パスワード
   そもそも、
On Error GoTo 〜
ではなくて、きちんとロジックで判断して、If文などで分岐させるほうが良いと思いますよ。

trap1 には、行きましたか?
行ったとすると、メッセージボックスは表示されましたか?

【14107】Re:エラー回避について
発言  miran E-MAIL  - 04/5/20(木) 23:05 -

引用なし
パスワード
   わざとtrap1にいかせると、行きますが数字の認識が正常であってもエラーが出ますし、tatetやyokoのところでデバックになります。

【14108】Re:エラー回避について
回答  ちゃっぴ E-MAIL  - 04/5/20(木) 23:06 -

引用なし
パスワード
   エラートラップを一度コメントアウトしてみましょう!

ヒント
関数の引数が間違ってるものがあります。

【14109】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 23:06 -

引用なし
パスワード
   日付かどうかの判定は
IsDate() 関数を使ったほうが良いと思います。

また、CByte() とありますが、Byte型を使っているのですか?
IntegerかLongでよいと思いますよ。
数字であるかどうかの判定も、IsNumeric() 関数では?

【14110】Re:エラー回避について
回答  Asaki  - 04/5/20(木) 23:11 -

引用なし
パスワード
   >数字の認識が正常であってもエラーが出ますし、tatetやyokoのところで
>デバックになります。
そりゃあ、プログラムは上から下に流れますから。。。
IF文などで分岐の必要があるでしょう。

日本語で、処理の流れを、再度整理されることをお薦めします。

【14111】Re:エラー回避について
発言  ちゃっぴ E-MAIL  - 04/5/20(木) 23:18 -

引用なし
パスワード
   ????素朴な疑問????

>   On Error GoTo trap2
>    KOSU = TextBox2.Text
>   Exit Sub

そもそも、何をエラートラップしたいのでしょう?
キョロ^(・д・。)(。・д・)^キョロ

【14112】Re:エラー回避について
お礼  miran  - 04/5/20(木) 23:22 -

引用なし
パスワード
   無事数量が入るようになりました。
エラー回避もちゃんとなりました。

関数を知っていてもそれをどう使うかがちゃんとわかっていなかったのが今回の原因だと思います。もっと勉強したいと思います。

ありがとうございました。

【14113】Re:エラー回避について
発言  Asaki  - 04/5/20(木) 23:23 -

引用なし
パスワード
   >>   On Error GoTo trap2
>>    KOSU = TextBox2.Text
>>   Exit Sub
>
>そもそも、何をエラートラップしたいのでしょう?
>キョロ^(・д・。)(。・д・)^キョロ

たぶん、KOSU が数値型で宣言されてて、TextBox2.Textが数字でなかったら、
エラーになるんでは?

【14114】Re:エラー回避について
発言  ちゃっぴ E-MAIL  - 04/5/20(木) 23:37 -

引用なし
パスワード
   >たぶん、KOSU が数値型で宣言されてて、TextBox2.Textが数字でなかったら、
>エラーになるんでは?

おみそれいたしやした。
そこまで、考えがおよびませんでした。
しかし、まあ、なんという強引な・・・

こういう使い方?があるのかと勉強になりやした・・・

11796 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free