2

開いているワークシートで5分以上アクティビティがない場合に、開いているワークシートを閉じる方法はありますか?

たとえば、ワークシートでしばらく作業してから、シートを開いた状態で20分間離れます。ネットワーク上の誰かがシートにアクセスする必要がありますが、私がシートにアクセスしているためアクセスできません。

机から5分以上離れた後、シートが自分自身を保存し、そのシートを閉じるようにしたいと思います。

これは可能ですか?もしそうなら、どのように?シートを保存して閉じる方法を示すスクリプトを見つけることができますが、タイマーを使用するスクリプトはまだ見つかりません...

4

2 に答える 2

3

これはリンクからの情報であるため、この質問を参照として使用できます。

次のコードをモジュールとして挿入します。

' DateTime  : 09/05/2007 08:43
' Author    : Roy Cox (royUK)
' Website   :  Clck here for more examples and Excel Consulting
' Purpose   : Place in a standard module
' Disclaimer; This code is offered as is with no guarantees. You may use it in your
'             projects but please leave this header intact.

'---------------------------------------------------------------------------------------
Option Explicit
Public EndTime
Sub RunTime()
    Application.OnTime _
            EarliestTime:=EndTime, _
            Procedure:="CloseWB", _
            Schedule:=True
End Sub
Sub CloseWB()
    Application.DisplayAlerts = False
    With ThisWorkbook
        .Save
        .Saved = True
        .Close
    End With
End Sub

これを「ThisWorkbook」に挿入します

Private Sub Workbook_Open()
    '--> Set Time Below
    EndTime = Now + TimeValue("00:00:00")
    RunTime
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
        EarliestTime:=EndTime, _
        Procedure:="CloseWB", _
        Schedule:=False
        EndTime = Empty
    End If
    '--> Set Time Below
    EndTime = Now + TimeValue("00:00:00")
    RunTime
End Sub
于 2012-06-08T14:56:53.290 に答える
2

さて、以下の元の答えで、もう少し調査した後、私は自分自身を思いついた。

開発者のセクションを開くと、シートが見つかります。このコードを以下のThisWorkbookに配置してください。これにより、コードがシート全体で機能するようになります。私は今、10:00分の初期タイマーがあり、事後に活動がある場合は05:00分のタイマーがある場所に設定しました。あなたはそれをあなたが望むものに変えることができます。

Option Explicit
Private Sub Workbook_Open()
    EndTime = Now + TimeValue("00:10:00")
    RunTime
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If EndTime Then
        Application.OnTime _
                EarliestTime:=EndTime, _
                Procedure:="CloseWB", _
                Schedule:=False
        EndTime = Empty
    End If
    EndTime = Now + TimeValue("00:05:00")
    RunTime
End Sub

この下の部分は、新しく作成されたモジュールに入る必要があります。好きな名前を付けてください。私の名前はSaveWBです。

Option Explicit

Public EndTime
Sub RunTime()
    Application.OnTime _
            EarliestTime:=EndTime, _
            Procedure:="CloseWB", _
            Schedule:=True
End Sub

Sub CloseWB()
    Application.DisplayAlerts = False
    With ThisWorkbook
        ThisWorkbook.Close savechanges:=True
    End With
End Sub

コードを次のように変更しました:

With ThisWorkbook
    .Save
    .Saved = True
    .Close
End With

その上にあったものに。

    With ThisWorkbook
        ThisWorkbook.Close savechanges:=True
    End With

私が作成した部分、最初に投稿された部分は、終了時に機能しますが、保存されません。あなたがそれであなたがすることをして、あなたが適切であると思うようにそれを変えてください、しかし私はそれがうまくいったことをうれしく思います。

于 2012-06-08T19:38:30.427 に答える