0

仕事のためにまとめたマクロに奇妙な問題があります。

裏話として、私は基本的に、X時間後に開いたままにした後、保護されたブックを閉じるマクロを設計しました。それは共有ドキュメントであり、人々がそれを開くとき、彼らはしばしばドキュメントを閉じるのを忘れて、他の人がそれを使用できないようにそれをロックします。

そこで、タイマーを作成するために他のマクロの断片を取りました。

Sub Start_Timer()
'BASIC UP COUNTER
Application.OnTime Now() + TimeValue("00:00:01"), "CheckStatus"
End Sub


Sub CheckStatus()
Dim ws As Worksheet
For Each ws In Worksheets

If ws.Range("IV1").Value > 60 Then
'IF IDLE LONGER THAN VALUE ABOVE, RUN THE FOLLOWING
Application.DisplayAlerts = False 'WORKS TO DISABLE ALERT PROMPT
ThisWorkbook.Close (False) 'CLOSE FILE WITHOUT SAVING
Application.Quit
Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS
End Sub    

Else
'ADD 1 TO COUNTER
ws.Range("IV1").Value = ws.Range("IV1").Value + 1
End If
Next
Start_Timer
End Sub

ThisWorkbookで

Private Sub Workbook_Open()
Dim ws As Worksheet
MsgBox ("This Worksheet has a 15 min timer")

Start_Timer
For Each ws In Worksheets
'Columns("IV:IV").Hidden = True

ws.Range("IV1").Value = 1
Next
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ws As Worksheet
For Each ws In Worksheets
ts.Range("IV1").Value = 1
Next
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False 'WORKS TO DISABLE ALERT PROMPT
ThisWorkbook.Close (False) 'CLOSE FILE WITHOUT SAVING
Application.Quit
Application.DisplayAlerts = True 'RESETS DISPLAY ALERTS
End Sub

ほとんどの場合、それは機能します。しかし、私はむしろ「Application.Quit」のようなものを排除したいと思います。私が抱えている問題は、その行を削除すると、手動で閉じた後、または手動でExcelを終了しようとした後、ワークブックがすぐに再度開くことです。

1つのセルの値を絶えず変更し(遠く離れているため、誰にも表示されない)、保存せずに終了する必要があると思います。

誰か助けてもらえますか?ありがとう

4

3 に答える 3

1

たぶんあなたはタイプミスがありますか?:

Dim ws As Worksheet
For Each ts In Worksheets
         ^ws ??
If ws.Range("IV1").Value > 60 Then
于 2013-03-25T21:10:00.567 に答える
0

複数のユーザーが同時にアクセスできるように、Excelファイルに共有ステータスを与えることができることをご存知ですか?

例を参照してください:http: //office.microsoft.com/en-in/excel-help/share-a-workbook-HP005202595.aspx

于 2013-03-25T21:22:18.773 に答える
0

最後にスケジュールされたOnTime()時間値を格納し、タイマーサブを調整するグローバル変数を追加します。

Dim lastTimer As Variant

Sub Start_Timer()
    'BASIC UP COUNTER
    lastTimer = Now() + TimeValue("00:00:01")
    Application.OnTime lastTimer, "CheckStatus"
End Sub

次に、これをWorkbook_BeforeCloseイベントに追加します。

Application.OnTime lastTimer, "CheckStatus", , False

これにより、Application.OnTime()によって最後にスケジュールされた呼び出しがキャンセルされます。

于 2013-03-26T23:25:01.257 に答える