2016-06-28 1 views
0

내 랩톱에서 Shift 키를 두 개 많이 눌러 붙입니다. 일반적으로 ctrl + 페이지를 사용하여 탐색 할 때 실수로 Excel에서 그룹 시트를 편집합니다.코드가 ThisWorkbook에서 작동하지만 Personal.xlsb에서는 작동하지 않습니다

친구가 저에게 VBA에서 ThisWorkbook에 붙여 넣을 수있는 코드를 만들었지 만, 나는 수천 개의 파일을 가지고 있습니다. 그가 (아래) 준 코드는 그룹 시트 편집을 취소하고 다른 시트를 제외한 모든 선택을 취소합니다. Personal.xlsb에서 작동하는 방법이 있는지 알고 싶습니다. 그래서 모든 파일에이 코드를 붙여 넣을 필요가 없습니다.

새로운에서

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range) 
If ActiveWindow.SelectedSheets.Count > 1 Then 
Application.EnableEvents = False 
Dim x As Integer 
x = MsgBox("This will undo previous action taken. Do you want to continue?", vbYesNo, "Confirmation") 
If x = vbYes Then 
Application.Undo 
Else 
End If 
ActiveSheet.Select 
Application.EnableEvents = True 
End If 
End Sub 
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range) 
If ActiveWindow.SelectedSheets.Count > 1 Then 
Application.EnableEvents = False 
ActiveSheet.Select 
Application.EnableEvents = True 
End If 
End Sub 
+1

응용 프로그램 수준에서 이벤트를 트래핑 할 수 있습니다 - Google "Excel 응용 프로그램 이벤트" –

+1

문제를 저장하십시오! http://www.cpearson.com/excel/AppEvent.aspx –

+0

@TimWilliams는 매일 새로운 것을 배웁니다. 시원한. –

답변

1

(I 고급에 감사드립니다, 내 인터넷 연결이 도움을 주셔서 감사합니다! 내가 즉시 응답하지 못할 수 있습니다 여기에 매우 약하지만) Personal.xlsb의 클래스 모듈 clsAppEvents : 일반 코드 모듈에서

Option Explicit 

Private WithEvents App As Application 

Private Sub Class_Initialize() 
    Set App = Application 
End Sub 

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Debug.Print "Changed sheet '" & Sh.Name & "' in workbook '" & Sh.Parent.Name & "'" 
    If ActiveWindow.SelectedSheets.Count > 1 Then 
     Application.EnableEvents = False 
     Dim x As Integer 
     If MsgBox("This will undo previous action taken. Do you want to continue?", _ 
            vbYesNo, "Confirmation") = vbYes Then 
      Application.Undo 
     End If 
     ActiveSheet.Select 
     Application.EnableEvents = True 
    End If 
End Sub 

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    Debug.Print "Selection on sheet '" & Sh.Name & "' in workbook '" & Sh.Parent.Name & "'" 
    If ActiveWindow.SelectedSheets.Count > 1 Then 
     Application.EnableEvents = False 
     ActiveSheet.Select 
     Application.EnableEvents = True 
    End If 
End Sub 

:

Option Explicit 

Dim oApp As clsAppEvents 

Sub InitAppEvents() 
    Set oApp = New clsAppEvents 
End Sub 
,

또는 ThisWorkbook 코드 모듈에 해당 코드를 넣고 Workbook_Open 이벤트에 연결할 수 있습니다.

InitAppEvents을 실행하면 클래스 모듈에서 처리되는 이벤트 캡처가 시작됩니다.

참고 : 코드 수정 또는 처리되지 않은 오류와 같이 VBA 프로젝트가 재설정되는 모든 항목은 일정을 캡처하는 클래스 인스턴스를 재설정해야합니다 (다시 말하면 InitAppEvents).

+0

정말 고마워요! 처음에는 클래스 모듈의 이름을 바꾸지 않았으므로 제대로 작동하지 않았습니다. 내 작업은 Excel에서 많이 돌아서 이제는 많은 시간을 절약 할 수 있습니다. 나는 이것에 정말로 감사한다! – Cindz