• ベストアンサー

ファイルの自動保存終了が出来るでしょうか。

共有ファイルを操作している人が急な事情で席をはずし長時間そのままになってしまうことがよくあり困っています。 このような共有ファイルに、一定時間が経過すれば、自動的に保存終了するような機能やマクロの設定などは出来るでしょうか。 例えば20分無操作となれば自動的に保存終了を行う機能や設定などです。 どなたか教えてください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.2

ケアレスミスでした。 ---------------------------------------------------- Option Explicit Const 自動保存時間 = 10 Private Sub Workbook_Open() Application.OnTime Now() + TimeSerial(0, 自動保存時間, 0), "Thisworkbook.自動保存" End Sub Public Sub 自動保存() Application.EnableEvents = False If ThisWorkbook.Saved = True Then ThisWorkbook.Close Else ThisWorkbook.Save Application.OnTime Now() + TimeSerial(0, 自動保存時間, 0), "Thisworkbook.自動保存" End If Application.EnableEvents = True End Sub

その他の回答 (3)

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.4

ご質問が20分でしたので最初の10分後に自動保存次の自動保存までに変更がなければ閉じる仕様です。ですから15分は考えておりません。 仕様上、偶数になってしまいますので。 >入力の途中でも自動終了となる方法 可能ですがちょっと手間なんです。別ブックで監視する必要があります。 ですからこのブックの中ではなく別のブックを開いてそちらから監視するということになります。

hijtxa
質問者

お礼

早々のご教示、また再度のご回答、ありがとうございます。 早速活用させていただくことにします。 また、いろいろと勉強もさせていただきました。 本当にありがとうございました。 また、よろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 作ってみましたが、マクロの構造は少し複雑になっています。 入力してから、20分なり設定しても、強制自動終了ではうまくありません。以下のマクロは、入力しないままにしておくと、やがて、終了します。 この設定は、「このまま終了しますか。」というメッセージが出て、いいえ/No を押さないと、そのまま終了してしまいます。 入力している限りは、常に、20分先にタイマーがセットしなおされます。(忙しくセットしなおされていますから、ここは工夫の余地があります) 標準モジュールのここで設定されます。 Private Const SETTIME As Long = 20 'ここに時間を入れます(20分) ThisWorkbook モジュールの Workbook_Open で、  If InStr(ThisWorkbook.FullName, "\\") = 0 Then Exit Sub ネットワークのみに作動するようになっています。 標準モジュールの Sub AutoMessage() で、  ' .SaveAs Application.DefaultFilePath ... の「'」コメントブロックを外すと、別名で、クライアント側に保存されます。 なお、私は、自信もってお勧めするわけではありませんが、通常の方法では、OnTime メソッドを使った場合、20分前に、ブックをクローズして、Excel・アプリケーションを開けたままにしておくと、再び、ブックを呼び出し起動してしまいます。ですから、アプリケーションを終了するか、もしくは、タイマーをオフにしないとダメですね。(今回は、アプリケーションは終了はしていません) それと、一応、こちらが考えていたようなものが出来たつもりでいるのですが、まだ、十分な検査を行っているわけではありません。何かの参考になれば幸いです。 '------------------------------------ 'ThisWorkbook モジュール Private Sub Workbook_Open()  'ネットワーク上の時だけ起動する If InStr(ThisWorkbook.FullName, "\\") = 0 Then Exit Sub  swFlg = True  Call SetTimer  MsgBox "自動終了マクロが起動されています。", 64 End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  swFlg = False  Call SetOffTimer End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean)  finalFlg = True  Call SetOffTimer End Sub '---------------------------------------- '標準モジュール Public swFlg As Boolean Public finalFlg As Boolean Private myTime As Date Private LastTime As Date Private Const SETTIME As Long = 20 'ここに時間を入れます Sub SetTimer()   '強制的に設定する   Application.Interactive = False   myTime = CDate(Format(Now, "yyyy/mm/dd hh:MM:00")) + TimeSerial(0, SETTIME, 0)   LastTime = myTime + TimeSerial(0, 0, 20)   If swFlg Then     Application.OnTime EarliestTime:=myTime, _               Procedure:="AutoMessage", _               LatestTime:=LastTime   End If   Application.Interactive = True End Sub Sub SetOffTimer()  On Error Resume Next  Application.OnTime EarliestTime:=myTime, _            Procedure:="AutoMessage", _            LatestTime:=LastTime, _            Schedule:=False  On Error GoTo 0  '終了時には再設定しない  If finalFlg = False Then  swFlg = True  Call SetTimer  End If End Sub Sub AutoMessage() Dim ret As Integer Dim Wshell As Object   If myTime = 0 Then Exit Sub   Set Wshell = CreateObject("WScript.Shell")   If Wshell.PopUp("このまま終了しますか。OK/はい" & vbCrLf & myTime, _   6, "終了メッセージ", 1 + 32) = 2 Then     Set Wshell = Nothing     Call SetOffTimer     Exit Sub   End If   Set Wshell = Nothing   With ActiveWorkbook     finalFlg = True     Call SetOffTimer     .Save '   .SaveAs Application.DefaultFilePath & "\" & Format(myTime, "hhmmss") & ".xls" '別名保存    .Close False   End With End Sub

hijtxa
質問者

お礼

ありがとうございました。 ご苦労されたのではと思いますが、すばらしいですね。 このようなプログラムが組めればと何時も思うのですが、 つい頼ってしまいます。 社内ランですので、メッセージが出るようになっているのは最高です。 本当にありがとうございました。 また、よろしくお願いいたします。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.1

VBEでプロジェクトエクスプローラのThisworkbookを 右クリックからコードの表示を行い以下を貼ってみてください。 ---------------------------------------------------- Option Explicit Const 自動保存時間 = 10 Private Sub Workbook_Open() Application.OnTime Now() + TimeSerial(0, 自動保存時間, 0), "Thisworkbook.自動保存" End Sub Public Sub 自動保存() Application.EnableEvents = False If ThisWorkbook.Saved = True Then ThisWorkbook.Close Else ThisWorkbook.Save Application.OnTime Now() + TimeSerial(0, 自動保存時間, 0), "Thisworkbook.自動保存" End If Application.EnableEvents = False End Sub

hijtxa
質問者

補足

本当に、ありがとうございます。 なお、ご教示いただいたマクロの時間を変更する場合、例えば15分に したい時は、Const 自動保存時間 = 10 の10を15にするだけで よいのでしょうか。 また、入力の途中(エンターキーで確定していない場合)は、自動終了が稼動しませんが、入力の途中でも自動終了となる方法があれば、助か ります。 いろいろとご迷惑おかけいたしますが、よろしくお願いいたします。

関連するQ&A

  • エクセルの自動保存について

    エクセルの自動保存の機能についての質問です。 ツール⇒オプション⇒自動保存⇒次の間隔で回復用データの自動保存を行う。 にチェックをし、時間を設定する。 この設定をすると「元に戻る」の操作が出来なくなる以外、いったい何の効果があるのですか? 私は、上書き保存してくれるものと思っていましたが、 そうではなく、 ファイルを閉じる際の「保存しますか?」のポップアップ画面で「いいえ」を選択すると、最初にファイルを開く前と同じ状態 つまり、上書き保存はされていないのです。 この自動保存の機能を使うメリットを教えてください。 よろしくお願いします。

  • WORDの時間経過後、自動終了

    職場の共有フォルダーに入っているdosファイルを、開けたまま席を離れ、他の人が使えません。 EXCELでは、時間が経つと終了できるマクロを組むことが出来ますが、ワードにはそのようなマクロはできないのでしょうか? ネットを探しても、イマイチ出ないため質問させていただきます。

  • 一定時間経過したExcelの強制終了方法を教えてください

    一定時間経過したExcelの強制終了方法を教えてください ExcelBookがAutoopenになっていて、マクロが起動します。 マクロが起動してから一定時間が経過したら、マクロでそのBookを強制終了したいのですが(保存等一切しなくてよいです)・・・ マクロは現行のまま処理(画面入力や検索する物です)を継続しつつ、 一定時間のカウントを行いたいのです。 時間経過後にマクロの処理中であっても強制終了させたいのです。 何方か、ご教授ねがいませんかm(_ _)m よろしくお願いいたします。

  • ウィンドウズの自動上書きってあるの?

    一定間隔の時間を設定しておいて、自動的に上書き保存してくれる機能はあるのでしょうか? また、できるのであれば、その、操作方法を教えてgoo!!。。。

  • EXCEL2002(XP)の自動保存について

    1.EXCEL2002(XP)には異常終了した場合の自動保存(ツール→オプション→自動保存)がありますが、前バージョン(EXCEL2000)の様に、上書きで自動保存してくれる自動保存機能はないのでしょうか? 2.誤って、長時間かけて作ったデータを「保存しないで終了」してしまいました(涙 「異常終了した場合の自動保存」は10分ごとにONにしてるのですが、「データを自動保存する場所」にはバックアップファイルは残ってませんでした。どこかにバックアップファイルは残ってないでしょうか・・・

  • EXCEL2002(XP)の自動保存

    1.EXCEL2002(XP)には異常終了した場合の自動保存(ツール→オプション→自動保存)がありますが、前バージョン(EXCEL2000)の様に、上書きで自動保存してくれる自動保存機能はないのでしょうか? 2.誤って、長時間かけて作ったデータを「保存しないで終了」してしまいました(涙 「異常終了した場合の自動保存」は10分ごとにONにしてるのですが、「データを自動保存する場所」にはバックアップファイルは残ってませんでした。どこかにバックアップファイルは残ってないでしょうか・・・

  • Excel2007 VBAでファイルの保存方法?

    Excel2007マクロにて、 AA1 というファイルで一定の処理後に、バックアップ用に、 AA2 と 2011AA AA1 という3つのファイルをカレントドライブに自動的に保存できるようなマクロを作りたい。 1. 自動記入(?)マクロで作成するも、ディレクトリが自動的に書き込まれるため、他のパソコンで操作するとエラーとなってしまうため、現在立ち上げているカレントドライブに保存できるようにしたい。 2.なお、保存順序は、 AA2 2011AA AA1 の順として、AA1 が最後に残るようにしたいです。 (またさらに、出来るものであれば AA2とAA1の保存の際は、上書き確認なしに自動的に保存できるようにしたいです。) 以上をやりたいのですが、初心者でよくわかりません。 教えて下さい。

  • 開いてるファイル(エクセル等)をバッチかVBScript自動的に保存す

    開いてるファイル(エクセル等)をバッチかVBScript自動的に保存する方法は? 幾つかのアプリを終了させ、その際エクセルを終了するときに、 開いているエクセルファイルを全部自動的に保存させて終了させたいと思います。 バッチでは保存のコマンドは無いようで、VBSで終わらせ方は分かったのですが、その前の保存がわかりません。ちなみにBookのタイトルはそのときにより変わります。あと今回はエクセルのマクロはつかいたくないので、VBSで使えるのでお願いします。

  • エクセル保存終了で一時ファイルが残ってしまう。

    エクセル保存終了で一時ファイルが残ってしまう。 職場でExcel2003+VBAを利用しています。(自宅ではExcel2002+VBAです) 不特定多数の人が利用している職場で、保存終了後に、拡張子なし英数字名の一時ファイルが残ってしまう場合があります。 理由はファイルが1M以上あり、保存に時間がかかります。砂時計表示中に再度、終了操作をしてしまい、重複して終了処理させてしまう為と思われます。 重複終了操作対策は色々試みています。 (対策案は以前、この場で質問させて頂いています) 消えずに残ってしまった一時ファイルは、私が手作業で削除しています。 VBA等で自動削除する方法はありましたら教えて頂きたくお願いします。

  • 添付ファイルを自動保存してくれるメーラー

    いつもお世話になります。 受信したメールの中に添付ファイルが有った場合、それを特定のフォルダに自動保存してくれるようなメーラーはご存じ有りませんでしょうか? メールはいつもOutlookを使ってるのですが、OutlookやOutlookExpressでは、自動保存する機能は通常では無かった様に思います。(マクロを作れば別でしょうが) もしこれが出来れば、自動保存した添付ファイルを更に自動的に特定のメールアドレスに送信するか、FTP転送ができるようにしたいと考えています。

専門家に質問してみよう