2013-03-25 142 views
0

我有一個奇怪的問題,我放在一起工作的宏。Excel宏導致文件重新打開

Backstory,我基本上設計了一個宏,在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單元格的值(遠遠沒有人看到它)並退出而不保存。

任何人都可以幫助我嗎?由於

+0

任何人都知道如何檢查我關閉文件後會發生什麼? 我嘗試斷點,但它們在文件關閉後被擦除,所以我不知道它關閉後會發生什麼。 – ProjectPokket 2013-03-26 15:22:35

回答

0

添加一個全局變量來存儲上次預定的導通時間()時間價值和調整計時器子:

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()的上次預定調用。

+0

謝謝,我試試吧! – ProjectPokket 2013-03-27 00:03:47

+0

你是對的,那就是問題所在。 我做了很多編輯(你給我的代碼並沒有按照我希望的方式工作),所以我添加了子函數,但最後它是「Application.OnTime lastTimer」,CheckStatus「,False」,它解決了問題。謝謝! – ProjectPokket 2013-03-27 18:57:51

+0

太棒了,我很高興能幫上忙! – 2013-03-27 19:14:14

1

也許你有一個錯字?:

Dim ws As Worksheet 
For Each ts In Worksheets 
     ^ws ?? 
If ws.Range("IV1").Value > 60 Then 
+0

總是使用'Option Explicit'來避免打印錯誤,如qPCR4vir – 2013-03-25 21:22:15

+0

所示哦,這是我的錯誤。這個錯字是我改變它的計算器,所以它更有意義。在實際的文件中,它們是相同的。儘管謝謝! – ProjectPokket 2013-03-25 21:49:07

0

你知道你可以給一個Excel文件共享的狀態,因此它可以由多個用戶同時放訪問?

見例如: http://office.microsoft.com/en-in/excel-help/share-a-workbook-HP005202595.aspx

+0

是的,我們對此有過長時間的討論,他們想要這樣離開它。最終發生的事情是有人打開文件並在週末回家。 因此,經過很多爭論,並且我列出了所有選項,這就是他們想要的。 我在IT工作,有趣的東西! – ProjectPokket 2013-03-25 21:46:00

+0

然後企業有一個Excel作爲客戶關係管理?哦,你的快樂和幸福! – 2013-03-25 21:53:58

+0

它的工作樂趣,他們想要做倒退,你只需要做到這一點! – ProjectPokket 2013-03-26 00:02:58