[[20111118104517]] 『VBA印刷でのエラートラップ』(ミカン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA印刷でのエラートラップ』(ミカン)
 お世話になります。
 下記のコードで印刷を行うと、
 印刷中です 
   ○/□ ページ
 のダイアログが出ている状態でキャンセルを押さなくても
 エラー処理が走ってしまいます。
 希望としては、キャンセルを押した時のみエラー処理が走って欲しいのですが…
 何が良くないのか教えて頂けないでしょうか。

 Sub 印刷()
    Dim wb_book As Workbook
    Set wb_book = ThisWorkbook

    If MsgBox("入力シートを印刷しますか?", vbQuestion + vbYesNo, "<入力シート>") = vbYes Then
        '印刷用シートを表示
        ThisWorkbook.Worksheets(cnsPrint).Visible = True
        '印刷設定
        With ActiveSheet.PageSetup
          .TopMargin = 0 '余白上 
          .LeftMargin = 0 '余白左
          .RightMargin = Application.CentimetersToPoints(1) '余白右
          .BottomMargin = 0 '余白下
          .HeaderMargin = 0 'ヘッダー余白
          .FooterMargin = 0 'フッター余白
          .CenterHorizontally = False '水平中央寄せ
          .CenterVertically = True    '垂直中央寄せ
          .Zoom = False '拡大/縮小を指定しない
        End With
On Error GoTo Error2
        Sheets(cnsInputSheet).PrintOut Copies:=1
        Sheets(cnsPrint).PrintOut Copies:=1
        MsgBox "入力シートの印刷が終了しました", , "入力シート印刷"
        '印刷用シートを非表示
        ThisWorkbook.Worksheets(cnsPrint).Visible = False
    End If
Error2:
        MsgBox "入力シートの印刷をキャンセルしました"
        'オブジェクトの解放
        Set wb_book = Nothing
End Sub

 Excel2002 XP


 自己解決しました。
 下記のように書き換えました。

 Sub 入力シート印刷()
    Dim b_ErrFlg  As Boolean★

    'エラーフラグ初期化
    b_ErrFlg = True★

    '印刷用シートを表示
    ThisWorkbook.Worksheets(cnsPrint).Visible = True

    '印刷設定
     With ActiveSheet.PageSetup
        .TopMargin = 0 '余白上 (1=約0.0176mm)
        .LeftMargin = 0 '余白左
        .RightMargin = Application.CentimetersToPoints(1) '余白右
        .BottomMargin = 0 '余白下
        .HeaderMargin = 0 'ヘッダー余白
        .FooterMargin = 0 'フッター余白
        .CenterHorizontally = False '水平中央寄せ
        .CenterVertically = True    '垂直中央寄せ
        .Zoom = False '拡大/縮小を指定しない
    End With

 On Error GoTo Error★
        Sheets(cnsInputSheet).PrintOut Copies:=1
        Sheets(cnsPrint).PrintOut Copies:=1
        MsgBox "入力シートの印刷が終了しました", , "入力シート印刷"
        'エラーフラグ(回避)★
        b_ErrFlg = False★
 Error:★
    If b_ErrFlg = True Then★
        MsgBox "印刷をキャンセルしました", vbInformation + vbOKOnly, "入力シート印刷"★
    End If★
        '印刷用シートを非表示
        ThisWorkbook.Worksheets(cnsPrint).Visible = False
 End Sub

 ★の部分が変更した箇所です。
 どなたかの参考になればと思います。
 ミカン Excel2002 XP


On Error GoTo Error★
        Sheets(cnsInputSheet).PrintOut Copies:=1
        Sheets(cnsPrint).PrintOut Copies:=1
        MsgBox "入力シートの印刷が終了しました", , "入力シート印刷"
        'エラーフラグ(回避)★
    exit sub   ’とここでプロシジャーを抜けます。
                  'エラートラップセクションには、普通は、トラップが
                  'が発生したときだけ入るようにします けどねえ 
        b_ErrFlg = False★
 Error:★
    If b_ErrFlg = True Then★
        MsgBox "印刷をキャンセルしました", vbInformation + vbOKOnly, "入力シート印刷"★
    End If★
        '印刷用シートを非表示
        ThisWorkbook.Worksheets(cnsPrint).Visible = False
 End Sub

 ichinose

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.