Excel VBA質問箱 IV

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

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


1801 / 13645 ツリー ←次へ | 前へ→

【71831】エラートラップが効かない 悩める老人 12/4/13(金) 14:39 質問[未読]
【71832】Re:エラートラップが効かない とおりすぎ 12/4/13(金) 15:18 回答[未読]
【71833】Re:エラートラップが効かない 悩める老人 12/4/13(金) 18:41 質問[未読]
【71834】Re:エラートラップが効かない ichinose 12/4/13(金) 20:11 発言[未読]
【71835】Re:エラートラップが効かない 悩める老人 12/4/13(金) 20:56 質問[未読]
【71837】Re:エラートラップが効かない ichinose 12/4/13(金) 23:52 発言[未読]
【71838】Re:エラートラップが効かない 悩める老人 12/4/14(土) 6:58 お礼[未読]

【71831】エラートラップが効かない
質問  悩める老人  - 12/4/13(金) 14:39 -

引用なし
パスワード
   早速ですが下記コードは Application.InputBoxにパスワートを入力し格納済データを呼び出し再処理するためのものですが実行テストのため

1.偽パスワード「1111」のときはエラートラップで「該当する番号は〜」
 と意図とおりに作動しましたが
2.つづいて偽パスワード「2222」を入れたらエラートラップが効かずエラーメッセージ「worksheetfunction.Macth〜」が出て止まってしまいました。

解決策をご教示頂ければ大変嬉しく思います。よろしく願います。


Sub 再開回答()
 'パスワードで個別データを呼出す
  Dim bangohanni As Range, bango As Single
  Dim DT As Worksheet

   set DT=Worksheets("DT")

   Application.DisplayAlerts = False
     
   mg = "中断した回答の再開ですよね (?_?) "
   ans = MsgBox(mg, vbYesNo)
   If ans = vbNo Then
     Exit Sub '処理パス
   End If
   
saikai:
   Set bangohanni = DT.[e3:iv3]
   bango = Application.InputBox(prompt:="パスワードを入力してください!", _
      Title:="パスワード入力", Type:=1)
       
   If bango = False Then
     MsgBox "パスワードを確認してやり直してください (?_?)"
     Exit Sub
   Else
      
On Error GoTo errmsg:
     retu = WorksheetFunction.Match(bango, bangohanni, 0)    
     DT表示 retu + 4 'DT呼出表示する
       
     MsgBox "回答が完了したら「Ank回答」をクリックしてください"   
  End If    
    
    Application.DisplayAlerts = True
     
  Exit Sub
errmsg:
   MsgBox "該当する番号はありませんよ!確認してください"
   GoTo saikai
End Sub

【71832】Re:エラートラップが効かない
回答  とおりすぎ  - 12/4/13(金) 15:18 -

引用なし
パスワード
   HELPのOn Error ステートメントより

エラー処理ルーチンがアクティブになっている間 (エラーの発生と Resume、Exit Sub、Exit Function、または Exit Property ステートメントの間) は、カレント プロシージャのエラー処理ルーチンはエラーを処理できません。


Application.Machの戻り値をVariantで受けて、型が何かで判断させる。
Gotoは使わず、Do Loopとかで。

【71833】Re:エラートラップが効かない
質問  悩める老人  - 12/4/13(金) 18:41 -

引用なし
パスワード
   ▼とおりすぎ さん:

早速のご教示ありがとうございます。
誠に恐縮ですがが Do Loop を使ってどのように書けばよろしいのか教えて
頂けませんでしょうか? よろしくお願いします。

>HELPのOn Error ステートメントより
>エラー処理ルーチンがアクティブになっている間 (エラーの発生と Resume、Exit Sub、Exit Function、または Exit Property ステートメントの間) は、カレント プロシージャのエラー処理ルーチンはエラーを処理できません。
Application.Machの戻り値をVariantで受けて、型が何かで判断させる。
>Gotoは使わず、Do Loopとかで。

【71834】Re:エラートラップが効かない
発言  ichinose  - 12/4/13(金) 20:11 -

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


>解決策をご教示頂ければ大変嬉しく思います。よろしく願います。
これは、

>
Option Explicit 'これを付けて変数宣言を義務付ける癖を付けてください
>Sub 再開回答()
> 'パスワードで個別データを呼出す
>  Dim bangohanni As Range, bango As Single
>  Dim DT As Worksheet
  Dim mg As String
  Dim ans As Long
  Dim retu As Variant
  Dim DT表示 As Long

>   set DT=Worksheets("DT")
>
>   Application.DisplayAlerts = False
>     
>   mg = "中断した回答の再開ですよね (?_?) "
>   ans = MsgBox(mg, vbYesNo)
>   If ans = vbNo Then
>     Exit Sub '処理パス
>   End If
>   
>saikai:
>   Set bangohanni = DT.[e3:iv3]
>   bango = Application.InputBox(prompt:="パスワードを入力してください!", _
>      Title:="パスワード入力", Type:=1)
>       
>   If bango = False Then
>     MsgBox "パスワードを確認してやり直してください (?_?)"
>     Exit Sub
>   Else
>      
>On Error GoTo errmsg:
>     retu = WorksheetFunction.Match(bango, bangohanni, 0)    
     DT表示= retu + 4 'DT呼出表示する  '記述ミスかな?
>       
>     MsgBox "回答が完了したら「Ank回答」をクリックしてください"   
>  End If    
>    
>    Application.DisplayAlerts = True
>     
>  Exit Sub
>errmsg:
>   MsgBox "該当する番号はありませんよ!確認してください"
   Resume saikai
>End Sub

Resume saikai

↑ここを変更すれば、作動はします。

が、わかりづらいでしょう?

Do Loop を使えば、もっとわかりやすく記述ができます。

On Error 〜 ステートメントに関しては、
使ってもよいです。使い方を覚えるのも有意義だと思います。

【71835】Re:エラートラップが効かない
質問  悩める老人  - 12/4/13(金) 20:56 -

引用なし
パスワード
   ▼ichinose さん:
>こんばんは。

回答ありがとうございます

ご指摘ありましたOption Explicitを義務づけるようにいたします。
なお Do Loop を使えば、もっとわかりやすく記述がでるとのことですが
どのように記述すればよいのか不勉強で不明なのです。
まことに恐縮ですがご教示ねがいませんか? よろしくお願いいたします。

【71837】Re:エラートラップが効かない
発言  ichinose  - 12/4/13(金) 23:52 -

引用なし
パスワード
   ▼悩める老人 さん:
>ご指摘ありましたOption Explicitを義務づけるようにいたします。
>なお Do Loop を使えば、もっとわかりやすく記述がでるとのことですが
>どのように記述すればよいのか不勉強で不明なのです。
>まことに恐縮ですがご教示ねがいませんか? よろしくお願いいたします。

Sub 再開回答2()
 'パスワードで個別データを呼出す
  Dim bangohanni As Range
  Dim bango As Variant
  Dim DT As Worksheet
  Dim retu As Variant
  Dim DT表示 As Long
  Set DT = Worksheets("DT")
  Application.DisplayAlerts = False
  If MsgBox("中断した回答の再開ですよね (?_?) ", vbYesNo) = vbYes Then
   retu = Empty
   Do While IsEmpty(retu)
     Set bangohanni = DT.[e3:iv3]
     bango = Application.InputBox(prompt:="パスワードを入力してください!", _
                    Title:="パスワード入力", Type:=1)
     If TypeName(bango) <> "Boolean" Then
      On Error Resume Next
      retu = WorksheetFunction.Match(bango, bangohanni, 0)
      If Err.Number <> 0 Then '見つからない
        MsgBox "該当する番号はありませんよ!確認してください"
      Else          '見つかった
        'DT表示 = retu + 4 'DT呼出表示する
        MsgBox "回答が完了したら「Ank回答」をクリックしてください"
      End If
      On Error GoTo 0
     Else
      MsgBox "パスワードを確認してやり直してください (?_?)"
      retu = 0 'ループを抜けるために 0を入れる
     End If
   Loop
  End If
  Application.DisplayAlerts = True
End Sub

構造化プログラミングについて、一度検索してみるとよいですよ!!
階層構造をつくる なんて事が記述されている箇所があったら、注目してください。

【71838】Re:エラートラップが効かない
お礼  悩める老人  - 12/4/14(土) 6:58 -

引用なし
パスワード
   ▼ichinose さん:
おはようございます。
ご丁寧なご回答ありがとうございました。大変感謝しております。
これからも勉強に精進していきたいと思っています。
今後ともよろしくご指導願います。取り急ぎお礼まで

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