- ベストアンサー
VBAでエクセルの自動保存と閉じる機能を実装する方法
ham_kamoの回答
- ham_kamo
- ベストアンサー率55% (659/1197)
> 眺めているだけの場合にも閉じられてしまうところが、 > ちょっと・・・・検討してみます。。。。 やっぱりそうですよね。しかしながら、ただ眺めているだけでは何もオペレーションしてないのと同じなので、そうなってしまいます。マウスでどこかのセルをクリックしたり矢印キーでセルを移動するだけでいいのですが。 そうは言っても不便だと思ったので、ちょっと改良してみました。 何も操作せずに5分経つと、警告音とともに 5分以上操作がなかったので 30秒後に終了します。 操作を続行したいときは このボタンを押してください と表示されたボタンをExcelの画面の中央に表示するようにしました。 そのボタンを押せばブックは閉じません。ボタンを押さずに30秒経過すると、自動的にブックを閉じます。エクセルを最小化している場合は、最大化してボタンを表示するようにしています。 標準モジュールのマクロを以下に差し替えてみてください。 5分とか30秒などを調節する場合は、マクロ中の "00:05:00"や"00:00:30"の部分を変えてください。 Public Operated As Boolean Public AlertButton As Object Public AlertButtonPushed As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "ShowAlert" End Sub Sub CloseMe() If AlertButtonPushed Then Exit Sub AlertButton.Delete 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub Sub ShowAlert() Dim BtnLeft As Double, BtnTop As Double Dim BtnWidth As Double, BtnHeight As Double If Operated Then Operated = False SetTimer Exit Sub End If If Application.WindowState = xlMinimized Then Application.WindowState = xlMaximized End If AppActivate "Microsoft Excel - " & ThisWorkbook.Name AlertButtonPushed = False BtnWidth = 150 BtnHeight = 100 BtnLeft = ActiveWindow.Width / 2 - BtnWidth / 2 BtnTop = ActiveWindow.Height / 2 - BtnHeight ActiveSheet.Buttons.Add BtnLeft, BtnTop, BtnWidth, BtnHeight Set AlertButton = ActiveSheet.Buttons(ActiveSheet.Buttons.Count) AlertButton.OnAction = "AlertButton_Click" AlertButton.Characters.Text = _ "5分以上操作がなかったので" & vbCrLf & _ "30秒後に終了します。" & vbCrLf & _ "操作を続行したいときは" & vbCrLf & _ "このボタンを押してください" With AlertButton.Characters.Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 9 End With Beep Application.OnTime Now + TimeValue("00:00:30"), "CloseMe" End Sub Sub AlertButton_Click() AlertButtonPushed = True AlertButton.Delete SetTimer End Sub
関連するQ&A
- EXCELを自動的に終了したい
VBAマクロで処理をして、終了後に開いたブックを自動的に終了させるため、 Application.Quit を使用しましたが、 他に開いていたブックも終了してしまいます。 ActiveWorkbook.Close に変更すると、 他にブックを開いていない場合、自動的にブックは終了しますが、EXCELが終了しません。 該当のブックだけを終了することは、できないでしょうか?
- ベストアンサー
- オフィス系ソフト
- Excel VBAでブックを閉じる時、複数のブックが開いていると・・・。
WinXP+Excel2002なのですが、 ExcelのVBAでつくったアプリの中に、 Application.Quit ThisWorkbook.Close False と記述し、終了させる部分があります。 複数のブックが開いているときにこのプログラムを実行すると、 他のブックまで閉じようとするのですが、 これは何ともならないのでしょうか。 複数のブックを開いた状態でVBEを開くと、 どのブックをアクティブにしておいても、他のブックの モジュールが出てきますよね。これに関係あるのでしょうか。 VBAはそのブックだけに記述することができる・・・のでしょうか? 調べてみたのですがよくわかりませんでした。 基本的なことで恐縮ですが、こんな私にわかるよう 教えてくださる方いらしたらお願いいたします。
- ベストアンサー
- オフィス系ソフト
- ExcelのVBAでブックの保存
ExcelのVBAでブックを追加し保存を行っています。 その際、保存は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 Workbooks.Add ActiveSheet.Name = "サンプル" ActiveSheet.SaveAs OutFileName ActiveWorkbook.SaveAs OutFileName ActiveWorkbook.Close
- 締切済み
- その他MS Office製品
- EXCEL VBAでファイルを保存しないで閉じたい
EXCEL VBAでファイルを保存しないで閉じたい EXCEL VBAでコードを書いています。ワーク用EXCELが必要で、新規ブックを作成しています。 新規ブックで処理をさせた後に自動でブックを閉じたいと思っています。 そこで, WB.QUIT WB.CLOSE True と書いたのですが、新規ブックは閉じずにそのまま残っている状態です。 これを保存しないまま閉じるにはどのような処理が必要でしょうか?
- ベストアンサー
- その他MS Office製品
- エクセルVBA ブックを閉じるでエラー
こんにちは。 Excel2007になってから、ブックを閉じる場合にエラーが出力されてしまいます。 以下を全て試してみたのですが、「エクセルは動作を停止しました」とメッセージを出力後、再度エクセルを立ち上げてしまいます。 解決方法をご存じの方がいらっしゃいましたら、教えていただきたく、 お願いいたします。 ThisWorkbook.Close ActiveWorkbook.Close Workbooks("mcr_fi.xls").Close よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Web上のエクセルのVBA操作について
OSはWin2000、エクセルも2000です。 社内のイントラネット上にエクセルのBOOKを置いてあります。 ダウンロードせずにダブルクリックでイントラ上で開いたこのBOOKに対するVBA操作で、以下の3つを試しましたが、すべてエラーになり、プレビューすることができません。 どう直せばよいのでしょうか? Sub test() ActiveSheet.PrintPreview End Sub Sub test2() ThisWorkbook.ActiveSheet.PrintPreview End Sub Sub test3() x = ThisWorkbook.ActiveSheet.Name ThisWorkbook.Sheets(x).PrintPreview End Sub また Sub 終了() ActiveWorkbook.Close (False) End Sub もまったく働きません。 どうやったら終了できますか?
- 締切済み
- オフィス系ソフト
- ブックCloseでVBAが続かない
エクセル2002を使用しています ブック(A)をコピーして名前(B)をつけて別ブックで保存しました ブック(A)を呼び出し後、ブック(B)を閉じてブック(A)のVBAを継続したいのですが 継続しません 作成したモジュールは以下です Application.DisplayAlerts = False '【不要なシートを削除する】 Sheets(Array("注文書入手差異表", "入手予定履歴", "main", "営C")).Select ActiveWindow.SelectedSheets.Delete '【ThisWorkbook.Pathの『注文書確認フォルダ』の中に、名前をつけて別ブックで保存する ' …ユーザーフォームを使用するのでマクロごと保存】 Dim myFolder As String Dim Filename As String myFolder = ThisWorkbook.Path & "\注文書確認フォルダ" Filename = Format(Date, "yyyymmdd") & "注文書入手予定表" If Dir$(myFolder, vbDirectory) = "" Then MkDir myFolder End If ActiveWorkbook.SaveAs Filename:= _ myFolder & "\" & Filename Application.DisplayAlerts = True '【保存した別ブック名を再取得】 Dim myName0 As String myName0 = ThisWorkbook.Name '【コピー元のファイルを開く】 Dim myPath As String myPath = Application.Substitute(ThisWorkbook.Path, "\注文書確認フォルダ", "") Workbooks.Open (myPath & "\" & "注文書入手予定表") MsgBox "【注文書確認フォルダ】の中に別ブックが作成されました" '【保存した別ブックを閉じる】 Workbooks(myName0).Activate Windows(myName0).Activate ActiveWorkbook.Close '******下のマクロが続かない***************** '====================== Call Macro6 '====================== VBA ステップインで原因を探ろうとしたのでですが 「中断モードでは入力できません」のメッセージがでて デバッグができません 八方ふさがりの状態です。助けていただけませんか。
- ベストアンサー
- オフィス系ソフト
- EXCELブックを保存しないで終了
EXCEL2000で"A"というブックから"B"というブックを マクロのVBAから開きます。 両方のシートが開いた状態から,"B"のマクロより 両方のブック共に保存しないで、EXCEL自体終了するマクロ を"B"側に下のような感じで作成しました。 -------- EXCEL終了処理 ------------------ Application.DisplayAlerts = False ThisWorkbook.Saved = False Application.Quit ---------------------------------------- これで終了しようとすると、「"B"のブックを保存しますか?」というメッセージが表示されてしまいます。終了前のマクロ処理の中で"B"ブックを変更しているので、このようなメッセージが表示されると思うのですが、 Application.DisplayAlerts = False 命令は利かないのですか? どなたか教えて下さい。宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- VBA 複数のBOOKの連続操作
いつもお世話になっております。 複数のブックの更新操作についてわからないことがあります。 複数のブックには項目別のWEBクエリが設定されており、 更新の際にはその都度ブックを開いた上更新しています。 BOOKは4つあり、 BOOK1のコマンドボタンからBOOK2~BOOK4までの更新を実行したいと思っています。 下記のように作ってみたのですが、 BOOK2を更新して閉じた後、BOOK3への処理はスルーされています。 エラーが出るわけではないのですが・・・ 素人のため、説明も要所を得ていませんが、 どうかお力を貸していただけないでしょうか? 下記 BOOK1のマクロ Private Sub CommandButton9_Click() 'ブック2を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" 'ブック3を開いてWEBクエリ更新 Workbooks.Open Filename:="D:\TestBook\test2.xlsm" WBN = ActiveWorkbook.Name Application.Run "'" & WBN & "'!Module3.更新して閉じる" End Sub BOOK2~BOOK4 Module3 Sub a1() ' エラーメッセージを表示する(On Errorステートメント) On Error GoTo Err '-------------------------------------------------------- 'webクエリ更新 Range("B6").Select Selection.QueryTable.Refresh BackgroundQuery:=False ’中略 'エラーならブックを上書き保存して閉じます Err: Sheets("sheet1").Select Range("C2").Select Selection.ClearContents Range("P3").Select If ThisWorkbook.Saved = False Then ThisWorkbook.Save End If ActiveWorkbook.Close End Sub 宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBAでエクセル終了
エクセル2000です。 VBAで「閉じる」ボタンを作りました。 Sub closeボタン() myYN = MsgBox("終了しますか?", vbYesNo + vbQuestion, "終了確認") If myYN = vbNo Then Exit Sub ThisWorkbook.Close End Sub ところが作動させると「いいえ」を選ぶとすんなり終了してくれますが、「はい」にすると「変更を保存しますか?」を何故か続けて2回も聞いてきます。 2回目も「はい」にすると今度はブック保存のダイアログが出てきて、ブック名が「:」(半角コロン)になってます。 変だなあ、と思い上記のマクロを別ブックを新たに作って標準モジュールに張ってみると正常に作動します。 もとのブックに何かあって、こんな現象が起きているのでしょうか? とっても困ってます。
- ベストアンサー
- オフィス系ソフト
お礼
色々恐縮です。 早速ですが、標準モジュールのマクロを以下に差し替えてみまして 「ステップイン」を実行してみましたが、下記の2ケ所でデバッグが 表示されてしまいます・・・・・ スミマセンがよろしくご教授お願いします。 1. Sub CloseMe() If AlertButtonPushed Then Exit Sub AlertButton.Delete ←←1.ここの部分 'ブックの上書き保存 2. Sub AlertButton_Click() AlertButtonPushed = True AlertButton.Delete ←←2.ここの部分 SetTimer End Sub