[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『時間で保存』(みさき)
質問させてください。まずブックを開きます。そこでこのブックを保存したいのですが
この保存方法で5分たった時点で自動で保存してブックを閉じる方法を教えてください。
宜しくお願いします。
VBAのApplication.OnTimeメソッドを使えば出来ると思います。 問題は、5分後の時刻をどこに保存して置くかですが・・・・ (5分前にオペレータがブックを閉じた時にOntimeメソッドの取消しを行なう時に必要)。 変数だとシートをユーザーに触らせると簡単に値が消えてしまう可能性がありますからねえ!! どこかのセルに入れておくか・・・、さてどうしよう・・・。 ユーザー設定のドキュメント プロパティに保存するようにしました。
当該ブックのThisworkbookのモジュールに
Option Explicit '==================================================================================== Const e_tm = "終了時刻" '==================================================================================== Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Application.OnTime EarliestTime:=get_cdp(e_tm).Value, Procedure:="thisworkbook.end_proc", Schedule:=False On Error GoTo 0 End Sub '==================================================================================== Private Sub Workbook_Open() Dim tm As Date tm = Now() + TimeValue("00:05:00") If mk_cdp(e_tm, msoPropertyTypeDate, tm) <> 0 Then get_cdp(e_tm).Value = tm End If Application.OnTime EarliestTime:=get_cdp(e_tm).Value, Procedure:="thisworkbook.end_proc" End Sub '==================================================================================== Sub end_proc() ThisWorkbook.Close True End Sub '====================================================================== Function mk_cdp(pnm As Variant, mytype As MsoDocProperties, myvalue) On Error Resume Next With ThisWorkbook .CustomDocumentProperties.Add pnm, False, mytype, myvalue End With mk_cdp = Err.Number On Error GoTo 0 End Function '====================================================================== Function get_cdp(pnm As String) As DocumentProperty Dim cp As DocumentProperty Set get_cdp = Nothing For Each cp In ThisWorkbook.CustomDocumentProperties If cp.Name = pnm Then Set get_cdp = cp Exit For End If Next End Function
これで一度保存した後、Excelを終了し、再度当該ブックを開いて試してみてください。
最初は5分後は長いので上記のコードの
tm = Now() + TimeValue("00:05:00")
の箇所を tm = Now() + TimeValue("00:00:20")
ぐらいで試してみてください。
ichinose
>しかしグレーの画面になってしまいます。この状態でブックを閉じた事になるのですか? このグレーの画面ってのは、提示したVBAコードを含んだブックが閉じた後、Excel自身が残っていると言うことですよね? Excelまで消してしまったら、VBAコードを含んだブックを開いた状態で、別のブックを編集していたら、 時間が経ったのでExcelまで閉じられてしまった と言うことになってしまいます。 投稿したVBAコードは、「開いてから5分経ったらそのブックを保存して閉じる」という機能を持ったコードです。 5分経ったら閉じるのは、VBAコードを含んだブックだけで良いですよね? こういう理由でExcel自身は、閉じずに残しています。
>複数のユーザーが同じブックを使用していてブックを開きぱなしにされると使用中読み取りでとなるのを防ぎたいのです Excel自身が残っていても対象ブックさえ閉じれば、上記の問題は解決すると思います。 が・・・・・。
現状のVBAコードは、繰り返しますが、 「開いてから5分経ったらそのブックを保存して閉じる」という機能を持ったコードです。
ですから、対象ブックを開いて、使用者が入力したり、訂正したりしてこのブックを使っていても 5分経過すれば、保存はしますが、閉じてしまいます。 入力している途中で閉じてしまうのですよ!!私なら、「何だよ!!」とPCの前で怒っちゃうかな・・。
それでもこの仕様でよいと言うなら、現状コードでよいでしょう!! でも、ブックを開いてから、5分間編集操作がなかったら、そのブックを保存して閉じる(例) と言うように編集操作があれば、閉じる時間が延長される仕様にするなら、 コードを変更しなければなりません。
検討してみてください。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.