忍者ブログ
ブログ主が仕事や個人的に学んだPC系・プログラミング系(VBAとかHTML)について書いていく備忘録ブログ。 ※ここで記載する内容はあくまで「個人的に」上手くいく内容です。ご使用には十分注意してください
[28] [27] [26] [25] [24] [23] [21] [19] [18] [17] [16
Posted by - 2024.04.24,Wed
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Posted by 若槻風亜 - 2014.12.09,Tue

(対象)Excel VBA
(確認)Excel2010、2013


今回はExcelでブックを閉じる時の確認動作です。

多分2010からだった気がしますが、2003の時の
閉じ方をすると、中身だけ消えてExcel自体が
残った状態になってしまいます。

でも全部消えるようにすると、複数ブックを
開いている時に困る。


そんな時は以下の通りの判断なんてどうでしょう。

※いらない部分もいくつかあるかもです

―――――――――――――――――――――――――――

<変数>
Dim MSG   As String 
Dim EndFG As Boolean
Dim WB1   As Workbook


<呼び出し>
'============================================
' ブックを閉じる時
'============================================
Sub auto_close()
    CloseThisFile
End Sub
※「auto_close」についてはこちらの記事


<本文>
※今回はExcelのVBAを保存しているファイルである
「PERSONAL.XLS」を含めて指定しています。


'===========================================================
' Excelの終了
'===========================================================
Sub CloseThisFile()
  '■終了の仕方を確認
  MSG = MsgBox("Excelを保存して終了する場合は「はい」を、" & vbCrLf & vbCrLf & _
               "保存しないで終了する場合は「いいえ」を押してください", vbQuestion + vbYesNoCancel, "【終了確認】")
  
  
  '■終了の選択によって閉じ方を変更
  EndFG = False
  If MSG = vbYes Then
    '<保存して閉じる>
    '△開いているのが1つのとき、もしくは2つで片方が「PERSONAL.XLS」の場合は保存してアプリケーションごと閉じる
    '※もうひとつ確実に開いているファイルがない場合はこの条件は前者だけでOK
    '※「BooksCheck」は上のファイルがない場合は不要の処理
    BooksCheck
    If Workbooks.Count = 1 Or (Workbooks.Count = 2 And EndFG) Then ThisWorkbook.Save: Application.Quit
    
    '△それ以外は普通にClose使って閉じる(保存する)
    ThisWorkbook.Close savechanges:=True
    
  ElseIf MSG = vbNo Then
    '<保存しないで閉じる>
    '△開いているのが1つのとき、もしくは2つで片方が「PERSONAL.XLS」の場合はアプリケーションごと閉じる
    BooksCheck
    If Workbooks.Count = 1 Or (Workbooks.Count = 2 And EndFG) Then Application.Quit
    
    '△それ以外は普通にClose使って閉じる(保存しない)
    ThisWorkbook.Close savechanges:=False
  End If
End Sub
※今回は「PERSONAL.XLS」があるかどうか。
確実に同時に開いている他ファイルがない場合は
このプロシージャは不要。

'===========================================================
' ブックの確認
'===========================================================
Sub BooksCheck()
  '■開いているブックをひとつずつ確認
  ' (この例の場合は「PERSONAL.XLS」の有無)
  For Each WB1 In Workbooks
    If WB1.Name = "PERSONAL.XLS" Then EndFG = True: Exit For
  Next
End Sub
―――――――――――――――――――――――――――

こんな感じです。

ちなみに終了確認の時のダイアログはこんな感じ↓



余計な部分もありますが、何か一緒に開いている物がある、
という場合には重宝したりします。(個人的には)


では今回はこの辺りで。

拍手[0回]

PR
Comments
Post a Comment
Name :
Title :
E-mail :
URL :
Comments :
Pass :   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
プロフィール
HN:
若槻風亜
性別:
女性
職業:
会社員
趣味:
創作、プログラミング
自己紹介:
仕事や個人で学んだことをまとめておきたかったがために備忘録ブログを立ち上げました。
あくまで自分が学んだこと・自分が出来たことなので、ご覧くださる場合は参照レベルでお願いします。
ブログ内検索
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
P R
最新トラックバック
コガネモチ
フリーエリア



Template by mavericyard*
Powered by "Samurai Factory"
忍者ブログ [PR]