Excel VBA質問箱 IV

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

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


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

【6671】「終了」をキャンセルしたい kawata 03/7/23(水) 10:53 質問
【6672】Re:「終了」をキャンセルしたい つん 03/7/23(水) 11:33 回答
【6673】Re:「終了」をキャンセルしたい kawata 03/7/23(水) 11:40 お礼
【6675】Re:「終了」をキャンセルしたい ポンタ 03/7/23(水) 12:14 回答
【6676】Re:「終了」をキャンセルしたい kawata 03/7/23(水) 12:42 お礼
【6679】Re:「終了」をキャンセルしたい kawata 03/7/23(水) 13:09 質問
【6681】Re:「終了」をキャンセルしたい kawata 03/7/23(水) 13:25 お礼

【6671】「終了」をキャンセルしたい
質問  kawata  - 03/7/23(水) 10:53 -

引用なし
パスワード
   kawataです、いつもお世話になっております。よろしくお願いします。
(Windows2000/Excel2000)

作業の済んだ時に入力データを別ブックに保存して終了するように
しておりますが、作業者が保存を忘れて、ブックを閉じようとした
場合に、データの最終行から未保存を判定(保存すれば削除するよ
うにしています)して、警告を出し、終了をキャンセルしたいのですが・・。

下のコードの場合、「vbno」のところへのコードがわかりません。
ぜひ、よろしくお願いします。

Sub Auto_close()
  With Sheets("main")
    e_row = .Range("b65536").End(xlUp).Row
    If e_row >= 4 Then
      A% = MsgBox("保存されていないデータがあります。終了しますか?", vbYesNo)
      Select Case A%
        Case vbYes
          Workbooks("aaa.xls").Close false
        Case vbNo
          'ここへは???
      End Select
    End If
  End With
End Sub

【6672】Re:「終了」をキャンセルしたい
回答  つん  - 03/7/23(水) 11:33 -

引用なし
パスワード
   ▼kawata さん:

>Sub Auto_close()
>  With Sheets("main")
>    e_row = .Range("b65536").End(xlUp).Row
>    If e_row >= 4 Then
>      A% = MsgBox("保存されていないデータがあります。終了しますか?", vbYesNo)
>      Select Case A%
>        Case vbYes
>          Workbooks("aaa.xls").Close false
>        Case vbNo
>          'ここへは???
          Exit Sub
>      End Select
>    End If
>  End With
>End Sub

で、ええんでは?と思いますが・・・・

【6673】Re:「終了」をキャンセルしたい
お礼  kawata  - 03/7/23(水) 11:40 -

引用なし
パスワード
   kawataです、よろしくお願いします。

つんさん、ありがとうございます。

>          Exit Sub
>
>で、ええんでは?と思いますが・・・・

例えば、終了用のボタンを作成して、そのコードとする場合は
いけているのですが・・・・、
「Auto_Close」に書いた場合、どうもうまくいかなくて。

いま、試してみましたが、やっぱり終わってしまします(^^;。

【6675】Re:「終了」をキャンセルしたい
回答  ポンタ  - 03/7/23(水) 12:14 -

引用なし
パスワード
   横から失礼します。

終了させたくないときは、Workbook_BeforeClose イベントの
Cancel プロパティを True にするのが簡単だと思います。

以下のコードを ThisWorkbook モジュールに貼り付けて
お試しください。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim e_row As Long
  Dim A As Integer
  With Sheets("main")
    e_row = .Range("b65536").End(xlUp).Row
    If e_row >= 4 Then
      A% = MsgBox("保存されていないデータがあります。終了しますか?", vbYesNo)
      Select Case A%
        Case vbYes
          With Application
            .EnableEvents = False
            Workbooks("aaa.xls").Close False
            .EnableEvents = True
          End With
        Case vbNo
          Cancel = True
      End Select
    End If
  End With
End Sub

【6676】Re:「終了」をキャンセルしたい
お礼  kawata  - 03/7/23(水) 12:42 -

引用なし
パスワード
   kawataです、よろしくお願いします。

ポンタさん、ありがとうございます。

>終了させたくないときは、Workbook_BeforeClose イベントの
>Cancel プロパティを True にするのが簡単だと思います。
>
>以下のコードを ThisWorkbook モジュールに貼り付けて
>お試しください。

はい、早速試しました。ThisWorkbookモジュールに貼り付けております。

が、Msgboxが出なくて、通常の終了処理時の
「はい/いいえ/キャンセル」が表示されます。

お手数おかけします、よろしくお願いします。

【6679】Re:「終了」をキャンセルしたい
質問  kawata  - 03/7/23(水) 13:09 -

引用なし
パスワード
   kawataです、よろしくお願いします。

一度、Excelを落として、再起動して試してみると、バッチリOKでした。
が、そのあとなんですが、

どうも、ほかのイベントも無効になっているみたいです。

チェックすべきポイントありましたら、よろしくお願いします。

【6681】Re:「終了」をキャンセルしたい
お礼  kawata  - 03/7/23(水) 13:25 -

引用なし
パスワード
   kawataです、よろしくお願いします。

>          With Application
>            .EnableEvents = False
>            Workbooks("aaa.xls").Close False
>            .EnableEvents = True
>          End With

またまた、おおきな勘違いをしていたようです<私(^^;。
ここで、Workbooks("aaa.xls")はThisworkbookのことで、
どうもそれがおかしい原因だったのでは?と。

>      Select Case A%
>        Case vbYes

          Thisworkbook.Saved = True

>        Case vbNo
>          Cancel = True
>      End Select

としてみました。とりあえず、動いているような(^^;。

これでいいのでしょうか?
う〜む、いまいち理屈が理解できにくいのですが・・・。
ポンタさん、つんさん、ありがとうございました。
また、よろしくお願いします。

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