매크로 사용 통합 문서가 열려 있으면 다른 통합 문서를 선택할 수 없습니다.
문제
코드를 사용하여 타이머를 설정하는 매크로 지원 통합 문서가 있습니다. 이것은 공유 책이며 종종 사람들이 책을 읽고 자리를 떠나는 경우가 있습니다.30분 동안 활동이 없으면 저장하고 닫도록 설정되어 있습니다.해당 기능은 잘 작동하는 것 같지만 문제는 다른 통합 문서를 열 때 타일을 클릭하거나(Windows 7) Alt+Tab을 눌러 선택할 수 없다는 것입니다. 이동할 수 있는 유일한 방법은 Ctrl입니다. +교대.문제가 되지 않는 통합 문서를 사용하는 것이 나만이었다면 왜 이런 일이 발생하는지 아는 사람이 있습니까?아래에 게시된 코드:
Private Sub Workbook_Open()
StartTimer
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
StartTimer
End Sub
Const idleTime = 1800 'seconds
Dim Start
Sub StartTimer()
Start = Timer
Do While Timer < Start + idleTime
DoEvents
Loop
Application.DisplayAlerts = False
ActiveWorkbook.Close True
Application.DisplayAlerts = True
End Sub
해결책 2
Thank you again for the reply, I couldn't quite figure you where I was supposed to put what as I am new to this as I had said. I did find a solution, or so it seems:
In the "This Workbook" module I put:
Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
ResetTimer
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ResetTimer
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ResetTimer
End Sub
and in the "user" module (i right click and add module), I used:
Public CloseDownTime As Variant
Public Sub ResetTimer()
On Error Resume Next
If Not IsEmpty(CloseDownTime) Then Application.OnTime EarliestTime:=CloseDownTime, Procedure:="CloseDownFile", Schedule:=False
CloseDownTime = Now + TimeValue("00:00:30") ' hh:mm:ss
Application.OnTime CloseDownTime, "CloseDownFile"
End Sub
Public Sub CloseDownFile()
On Error Resume Next
Application.StatusBar = "Inactive File Closed: " & ThisWorkbook.Name
ThisWorkbook.Close SaveChanges:=True
End Sub
.
내 전투의 절반은 사람들이 "이"또는 "그"모듈의 의미가 무엇을 의미하는지 실현하고 있습니다.이 코드는 조금 과도 할 수도 있지만 작동하는 것 같습니다.나는 당신이 돕고 올바른 추적에서 나를 얻을 시간을 가져다 주셔서 감사합니다!
다른 팁
우선, 왜 그런 행동이 나타나는지 완전히 확신할 수는 없지만 계속 읽어보시기 바랍니다.나 의심하다 그것은 당신과 관련이 있습니다 바빠서 기다리다 루프( DoEvents
) 그러나 그것은 단지 직감일 뿐입니다.다른 사람이 (더 나은) 설명을 할 수도 있습니다.
어쨌든 아마도 Application.OnTime
더 나은 접근 방식입니다.특정 시간이나 간격으로 작업이 발생하도록 예약할 수 있으며 이전에 예약된 작업을 취소하고 교체할 수 있는 옵션도 있습니다.당신은 그 시설이 필요합니다 Workbook_SheetChange
이벤트 핸들러.
즉, 다음을 수행할 수 있습니다.
- 통합 문서를 저장하고 종료하는 새 루틴을 추가하고 이를 호출해 보겠습니다.
SaveWorkbookAndExit
.이것은 다음에 의해 호출됩니다.OnTime
나중에. 귀하의 콘텐츠를 교체하십시오.
Workbook_SheetChange
다음과 같은 이벤트 핸들러:Application.OnTime Now + TimeValue("00:30:00"), _ "SaveWorkbookAndExit", _ Schedule:=False
이것은 기본적으로 루틴을 예약합니다.
SaveWorkbookAndExit
지금부터 30분 후에 전화가 옵니다.주목하세요Schedule:=False
-- 이전에 설정된 절차를 삭제/취소해야 함을 의미하며 이는 매우 중요합니다.- 또한 위와 동일한 코드를
Workbook_Open
이벤트 핸들러. 위와는 달리 설정해야 합니다.Schedule:=True
여기에서!
그리고 그게 다야.통합 문서가 열리면 새 SaveWorkbookAndExit
작전이 예정되어 있습니다.그럼 들어갈 때마다 Workbook_SheetChange
, 이전에 예약된 작업이 취소되고 새 작업이 대신 예약됩니다.
나는 이것에 대해 아무것도 테스트하지 않았지만 당신이 아이디어를 얻었기를 바랍니다.추가 설명이 필요한 경우 알려주시기 바랍니다.