Excel VBA質問箱 IV

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

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


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

【60154】上書き保存後の処理の件 kouka 09/1/30(金) 15:38 質問[未読]
【60155】Re:上書き保存後の処理の件 Jaka 09/1/30(金) 15:42 発言[未読]
【60156】Re:上書き保存後の処理の件 kouka 09/1/30(金) 17:03 発言[未読]
【60157】Re:上書き保存後の処理の件 Jaka 09/1/30(金) 17:12 発言[未読]
【60160】Re:上書き保存後の処理の件 ひつまぶし 09/1/31(土) 8:26 回答[未読]
【60182】Re:上書き保存後の処理の件 kouka 09/2/2(月) 15:54 お礼[未読]
【60184】Re:上書き保存後の処理の件 ひつまぶし 09/2/2(月) 19:21 発言[未読]
【60324】Re:上書き保存後の処理の件 kouka 09/2/10(火) 10:01 お礼[未読]

【60154】上書き保存後の処理の件
質問  kouka  - 09/1/30(金) 15:38 -

引用なし
パスワード
   お世話になってます。
koukaです。

上書き保存をした際に、メッセージボックスを表示させ、
vbYesNoで処理を変化させようと思い、
下記のコードを記述しました。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI = False Then
    Select Case MsgBox("TEST", vbYesNo)
      Case vbYes
        Call Macro1
      Case vbNo
        Exit Sub
    End Select
  End If
End Sub

しかし、『No』を選んでも上書き保存されてします。
『No』を選んだら上書き保存しないようにはするには、
どうすればよろしいのでしょうか?
記述が間違っているのであれば、教えてください。
すみませんが、よろしくお願いします。

【60155】Re:上書き保存後の処理の件
発言  Jaka  - 09/1/30(金) 15:42 -

引用なし
パスワード
   >Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>  If SaveAsUI = False Then
>    Select Case MsgBox("TEST", vbYesNo)
>      Case vbYes
>        Call Macro1
>      Case vbNo
        Cancel = True
>    End Select
>  End If
>End Sub

【60156】Re:上書き保存後の処理の件
発言  kouka  - 09/1/30(金) 17:03 -

引用なし
パスワード
   Jakaさん、さっそく回答ありがとうございます。
しかし、一つ問題が。。。

ファイルに何らかの修正・変更を行なって、
×で消そうとすると、『・・・保存しますか?』が出てきますよね?
そこで『はい』を押すとメッセージボックスTESTが表示されます。
このメッセージボックスで『いいえ』を選択すると、上書き保存されてしまいます。
これを回避する方法がありますでしょうか?
もしくは、×で消して保存する場合は、
このメッセージボックス自体を表示させないようにするとか・・・?
こんなひねくれた事をするなって言っちゃえば、それまでですけど。。。

すみませんが、教えてください。
よろしくお願いします。


>>Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
>>  If SaveAsUI = False Then
>>    Select Case MsgBox("TEST", vbYesNo)
>>      Case vbYes
>>        Call Macro1
>>      Case vbNo
>        Cancel = True
>>    End Select
>>  End If
>>End Sub

【60157】Re:上書き保存後の処理の件
発言  Jaka  - 09/1/30(金) 17:12 -

引用なし
パスワード
   保存したことにするとか。

ThisWorkbook.Saved = True

それと、2002でまだ確認を怠っているけど、
マクロで閉じると
Workbook_・・・・
の類はまともに動かないかも。

前に書いた記憶があるので、検索すれば見つかるかもしれません。

【60160】Re:上書き保存後の処理の件
回答  ひつまぶし  - 09/1/31(土) 8:26 -

引用なし
パスワード
   【60062】のスレッドでも書きましたが、
BeforeCloseイベント内でも、適切な処理を入れておくべきなのでしょう。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ret As VbMsgBoxResult
  If Not Me.Saved Then
    ret = MsgBox("'" & Me.Name & "' への変更を保存しますか?", _
      vbYesNoCancel + vbExclamation)
    Select Case ret
    Case vbYes
      Call Macro1
      Application.EnableEvents = False
      Me.Save
      Application.EnableEvents = True
    Case vbNo
      Me.Saved = True
    Case vbCancel
      Cancel = True
      Exit Sub
    End Select
  End If
End Sub

ってな感じでしょうか?

【60182】Re:上書き保存後の処理の件
お礼  kouka  - 09/2/2(月) 15:54 -

引用なし
パスワード
   Jakaさん、ひつまぶしさん、回答ありがとうございます。
やはり、Closeイベントを面倒くさがらずに書かなきゃダメですね。。。

そこで一つだけ質問!
>【60062】のスレッドでも書きましたが、
>BeforeCloseイベント内でも、適切な処理を入れておくべきなのでしょう。
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean)
>Dim ret As VbMsgBoxResult
        ↑これってどういうデータ型ですか??
>  If Not Me.Saved Then
>    ret = MsgBox("'" & Me.Name & "' への変更を保存しますか?", _
>      vbYesNoCancel + vbExclamation)
>    Select Case ret
>    Case vbYes
>      Call Macro1
>      Application.EnableEvents = False
>      Me.Save
>      Application.EnableEvents = True
>    Case vbNo
>      Me.Saved = True
>    Case vbCancel
>      Cancel = True
>      Exit Sub
>    End Select
>  End If
>End Sub
今まで使った事がなくって・・・。
差し支えなかったら、教えてください。
よろしくお願いします。

【60184】Re:上書き保存後の処理の件
発言  ひつまぶし  - 09/2/2(月) 19:21 -

引用なし
パスワード
   MsgBox関数が返す値の型です。
Enum列挙型として、VBAのメンバーに定義されています。

MsgBox関数をオブジェクトブラウザで確認すれば分かると思います。

Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult
VBA.Interaction のメンバ

【60324】Re:上書き保存後の処理の件
お礼  kouka  - 09/2/10(火) 10:01 -

引用なし
パスワード
   ひつまぶしさん、回答ありがとうございます。
返事が遅くなって、申し訳ございません。

一通り調べてみましたが、明確にはわかりませんでした。。。
VbMsgBoxResultが、MsgBoxの値を返すって事で、
自己完結で。。。

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

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