Excel VBAで指定時間後に自動的にファイルを保存または閉じる方法

Visual Basic

Excel VBAを使用して、指定時間が経過した後に自動的にファイルを保存して閉じる、あるいは保存せずに閉じる処理を実行する方法を紹介します。特に、書き込みパスワードを使って開いたファイルの場合は上書き保存し、読み取り専用で開いた場合は保存せずに閉じるというシナリオに対応するコード例を解説します。

Excel VBAでのタイムリミット処理の基本

Excel VBAでタイムリミットを設定し、指定した時間が経過したら自動的に処理を行うには、Application.OnTimeメソッドを使用します。このメソッドは、指定した時刻または時間間隔でVBAコードを実行する機能を提供します。

基本的なコード例

次のコードでは、指定した時間が経過すると、指定した処理を実行する方法を示します。

Sub SetTimeLimit()
  ' 30秒後にcloseThisWorkbookを実行
  Application.OnTime Now + TimeValue("00:00:30"), "closeThisWorkbook"
End Sub

上記のコードは、現在時刻から30秒後に「closeThisWorkbook」サブプロシージャを実行します。

書き込みパスワードで開いた場合に強制的に保存して閉じる

Excelファイルをパスワードで開いた場合、指定した時間が経過した後に強制的に上書き保存してファイルを閉じることができます。以下のコード例を参考にしてください。

Sub closeThisWorkbook()
  ThisWorkbook.Save
  ThisWorkbook.Close SaveChanges:=True
End Sub

このコードでは、「SaveChanges:=True」を指定して、ファイルを上書き保存し、閉じます。

読み取り専用で開いた場合に保存せずに閉じる

読み取り専用で開いた場合、デバイスに変更を加えず、保存せずにファイルを閉じることが求められます。これには「SaveChanges:=False」を使用して、変更を保存せずに閉じる処理を実行します。

Sub closeThisWorkbook()
  ThisWorkbook.Close SaveChanges:=False
End Sub

これにより、読み取り専用で開いたファイルが保存せずに強制的に閉じられます。

書き込みパスワードと読み取り専用時の時間制限を組み合わせる

次に、書き込みパスワードで開いた場合と読み取り専用で開いた場合の両方に対応するコードを組み合わせてみましょう。

Private Sub Workbook_Open()
  If ThisWorkbook.ReadOnly Then
    ' 読み取り専用の場合
    Application.OnTime Now + TimeValue("00:00:30"), "closeThisWorkbook_ReadOnly"
  Else
    ' 書き込みの場合
    Application.OnTime Now + TimeValue("00:00:30"), "closeThisWorkbook_Write"
  End If
End Sub

Sub closeThisWorkbook_Write()
  ThisWorkbook.Save
  ThisWorkbook.Close SaveChanges:=True
End Sub

Sub closeThisWorkbook_ReadOnly()
  ThisWorkbook.Close SaveChanges:=False
End Sub

このコードでは、ファイルが読み取り専用で開かれているか書き込み可能で開かれているかを判断し、それぞれに適した処理を行います。30秒後に読み取り専用の場合は保存せずに閉じ、書き込みの場合は保存して閉じる動作を実行します。

まとめ

Excel VBAを使用して、指定時間が経過した後にファイルを自動で保存または閉じる処理を行うことができます。書き込みパスワードで開いた場合は上書き保存して閉じ、読み取り専用で開いた場合は保存せずに閉じる処理を適切に組み合わせることができます。この方法を活用することで、時間管理を効率的に行い、業務の自動化を進めることができます。

コメント

タイトルとURLをコピーしました