2013-03-25 6 views
0

У меня есть странная проблема с макросом, который я собрал для работы.Excel Macro заставляет файл повторно открывать

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

ответ

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().

+0

Спасибо, я дам ему попробовать! – ProjectPokket

+0

Вы правы, вот в чем проблема. Я сделал много изменений (код, который вы мне дали, не работал так, как я надеялся), поэтому я добавил вспомогательные функции, но в конце это был «Application.OnTime lastTimer», «CheckStatus», «False», который исправил проблему , БЛАГОДАРЯ! – ProjectPokket

+0

Отлично, я рад, что смогу помочь! –

1

Может быть у вас есть опечатка ?:

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

Всегда используйте 'Option Explicit', чтобы избежать опечаток, как указано qPCR4vir –

+0

oh thats my bad. Эта опечатка заключалась в том, что я менял ее на stackoverflow, поэтому это имело больше смысла. В фактическом файле они одинаковы. Спасибо хоть! – ProjectPokket

0

Вы знаете, вы можете дать Excel файл общего статуса, так что она может быть доступна Simultaniously несколько пользователей?

смотри, например: http://office.microsoft.com/en-in/excel-help/share-a-workbook-HP005202595.aspx

+0

Да, мы долго обсуждали это, и они хотят оставить это таким образом. Что-то случилось, когда кто-то открыл файл и отправился домой на выходные. Итак, после многих аргументов, и я выкладываю все варианты, это то, что они хотели. Я работаю в сфере информационных технологий и развлечений! – ProjectPokket

+0

, а затем у бизнеса есть Excel как CRM? О, радость и счастье для вас! –

+0

Свое удовольствие от работы, они хотят сделать это назад, вы просто должны это сделать! – ProjectPokket