매크로 사용 통합 문서가 열려 있으면 다른 통합 문서를 선택할 수 없습니다.

StackOverflow https://stackoverflow.com//questions/25071193

  •  26-12-2019
  •  | 
  •  

문제

코드를 사용하여 타이머를 설정하는 매크로 지원 통합 문서가 있습니다. 이것은 공유 책이며 종종 사람들이 책을 읽고 자리를 떠나는 경우가 있습니다.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 이벤트 핸들러.

즉, 다음을 수행할 수 있습니다.

  1. 통합 문서를 저장하고 종료하는 새 루틴을 추가하고 이를 호출해 보겠습니다. SaveWorkbookAndExit.이것은 다음에 의해 호출됩니다. OnTime 나중에.
  2. 귀하의 콘텐츠를 교체하십시오. Workbook_SheetChange 다음과 같은 이벤트 핸들러:

    Application.OnTime Now + TimeValue("00:30:00"), _
                       "SaveWorkbookAndExit", _
                       Schedule:=False
    

    이것은 기본적으로 루틴을 예약합니다. SaveWorkbookAndExit 지금부터 30분 후에 전화가 옵니다.주목하세요 Schedule:=False -- 이전에 설정된 절차를 삭제/취소해야 함을 의미하며 이는 매우 중요합니다.

  3. 또한 위와 동일한 코드를 Workbook_Open 이벤트 핸들러. 위와는 달리 설정해야 합니다. Schedule:=True 여기에서!

그리고 그게 다야.통합 문서가 열리면 새 SaveWorkbookAndExit 작전이 예정되어 있습니다.그럼 들어갈 때마다 Workbook_SheetChange, 이전에 예약된 작업이 취소되고 새 작업이 대신 예약됩니다.

나는 이것에 대해 아무것도 테스트하지 않았지만 당신이 아이디어를 얻었기를 바랍니다.추가 설명이 필요한 경우 알려주시기 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top