비활성 후 통합 문서 강제 종료 (Microsoft Excel)
Dave는 통합 문서가 현재 사용되지 않는 경우 일정 시간 후에 강제로 닫을 수 있는지 궁금합니다. 그의 사무실에서 사람들은 서버에있는 통합 문서를 연 다음 열려 있다는 사실을 잊어 버립니다. 이 경우 다른 사람은 편집 할 수 없으므로 60 분 동안 방치하면 통합 문서를 강제로 닫으려고합니다.
매크로를 사용하여이 작업을 수행 할 수 있지만 비즈니스 또는 사용자 중심의 관점에서 그렇게하고 싶지 않을 수도 있습니다. 예를 들어, 사용자가 자신의 시스템에 세 개의 통합 문서를 열어서 비교할 수 있다고 가정 해 보겠습니다. “묶여”될 수 있습니다
두 개의 통합 문서를 꽤 오랫동안 사용하고 세 번째 통합 문서는 종료를 트리거하는 것입니다. Excel의 VBA는 크게 구별되지 않습니다. 통합 문서가 닫히면 일반적으로 현재 시간에 초점이 맞춰져 있습니다.
또한 닫을 때 저장되지 않은 변경 사항을 어떻게 처리합니까? 저장하면 사용자가 저장하려고하지 않은 문제가 발생합니다. 저장하지 않으면 반대의 문제가 발생합니다. 저장해야 할 데이터가 많을 수 있습니다. 마감 절차에서 정보를 저장해야하는지 물어볼 수 없습니다. 이렇게하면 통합 문서가 열려 있고 사용되지 않는 것처럼 확실하게 묶여 있습니다.
가능한 해결책은 단순히 통합 문서를 공유하는 것입니다. 공유를 활성화하면 (다른 _ExcelTips_에 설명 된대로) 여러 사람이 동시에 동일한 통합 문서를 열 수 있습니다. 이러한 사람 중 한 명이 열어두면 다른 사람은 여전히 열어서 통합 문서를 변경할 수 있으므로 불편을 겪지 않습니다.
매크로 기반 경로로 가기로 결정한 경우 솔루션은 다소 간단합니다. 일종의 타이머 구조 (OnTime 메서드를 사용하여 쉽게 구현 됨)와 누군가가 통합 문서에서 작업을 수행하고 있는지 확인하는 방법이 필요합니다.
시작하려면 표준 매크로 모듈에 다음 코드를 추가하십시오. 추가 할 세 가지 루틴이 있습니다.
Dim DownTime As Date Sub SetTimer() DownTime = Now + TimeValue("01:00:00") Application.OnTime EarliestTime:=DownTime, _ Procedure:="ShutDown", Schedule:=True End Sub
Sub StopTimer() On Error Resume Next Application.OnTime EarliestTime:=DownTime, _ Procedure:="ShutDown", Schedule:=False End Sub
Sub ShutDown() Application.DisplayAlerts = False With ThisWorkbook .Saved = True .Close End With End Sub
이 세 가지 루틴은 매우 간단합니다. 처음 두 개는 각각 타이머를 켜고 끕니다. 이러한 루틴은 루틴 외부에서 선언 된 DownTime 변수를 사용합니다. 이러한 방식으로 그 내용은 여러 루틴에서 활용 될 수 있습니다.
세 번째 루틴 인 ShutDown은 실제로 통합 문서를 닫는 루틴입니다. OnTime 메서드가 한 시간 후에 만료되는 경우에만 호출됩니다. 변경 사항을 저장하지 않고 통합 문서를 닫습니다.
다음 루틴 (4 개가 있음)을 ThisWorkbook 개체에 추가해야합니다. VBA 편집기를 열고 프로젝트 탐색기에서 ThisWorkbook 개체를 두 번 클릭합니다. Excel이 열리는 코드 창에서 다음 루틴을 배치합니다.
Private Sub Workbook_Open() Call SetTimer End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Call StopTimer End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Call StopTimer Call SetTimer End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Excel.Range) Call StopTimer Call SetTimer End Sub
처음 두 루틴은 통합 문서가 열리고 닫힐 때 트리거됩니다. 타이머를 시작하고 끕니다. 다른 두 루틴은 워크 시트가 다시 계산되거나 누군가 통합 문서에서 선택할 때마다 자동으로 실행됩니다. 둘 다 누군가가 통합 문서를 사용하고 있다는 좋은 지표입니다 (비활성 상태로 열려 있지 않음). 타이머를 중지 한 다음 다시 시작하여 1 시간 카운트 다운이 다시 시작되도록합니다.
다음과 같은 매크로 집합을 사용하는 데는 단점이 있습니다. Excel의 실행 취소 기능을 효과적으로 제거합니다. 매크로가 실행되면 실행 취소 스택이 Excel에서 자동으로 지워집니다. 통합 문서의 모든 변경 사항과 함께 매크로가 실행되기 때문에 사용자의 변경 사항은 취소 할 수 없습니다. (이 단점을 피할 수있는 방법이 없습니다.)
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (2281)은 Microsoft Excel 97, 2000, 2002 및 2003에 적용됩니다. 여기에서 Excel (Excel 2007 이상)의 리본 인터페이스에 대한이 팁의 버전을 찾을 수 있습니다.
link : / excelribbon-Forcing_a_Workbook_to_Close_after_Inactivity [비 활동 후 통합 문서 강제 종료]
.