2014-10-23 3 views
1

현재 워크 시트의 잠금을 해제하는 여러 통합 문서 템플릿에 VBA 스크립트가 있습니다. 매크로를 사용하도록 허용 된 사용자가 어떤 바로 가기 키를 사용하여 통합 문서의 잠금을 해제 할 수 있는지 기억할 필요가 없도록 동일한 바로 가기 키를 사용합니다.여러 통합 문서에서 동일한 바로 가기 키 사용

대부분의 사용자는 한 번에 두 개 이상의 통합 문서를 열지 않으므로 아무런 두통이 발생하지 않습니다. 어쨌든 단축키는 사용하지 않아도됩니다. 문제는 하나 이상의 통합 문서가 열려 있고 바로 가기 키를 사용하여 VBA 스크립트를 실행하려고하는 경우입니다. 현재 VBA 스크립트의 무작위 인스턴스를 얻고 있습니다. 통합 문서간에 암호가 다르므로 문제가 발생합니다. 따라서 핫키가 WB X의 VBA 스크립트를 시작하고 WB Y 인 경우 오류가 발생합니다.

요점에 도달하면 해당 단축키의 활성 통합 문서에있는 VBA 스크립트가 사용되는 방법이 있습니까?

당 알터의 요청은 여기

Sub Lock_Unlock() 
    Dim CurrentUser As String 'holds the current users Windows login 
    Dim Approved As String 
    Approved = "|user1|user2|user3|"

'Give CurrentUser it's value CurrentUser = Environ$("username") 'Check if the user is approved If InStr(1, Approved, CurrentUser) > 0 Then 'The user can use this macro. Check if the sheet is currently locked If ActiveSheet.ProtectContents = True Then 'It is, unlock ActiveSheet.Unprotect Password:=PW() Else 'It isn't, relock ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ False, Password:=PW() End If 'Not a user approved to use this macro, don't do anything End If End Sub Function PW() As String PW = "password" End Function
+0

코드를 포함 시키려면이 코드에 매우 흥미가 있습니다. 나는 내가 풀어야 할 비슷한 문제가 있는데, 너를 기초로 사용한다면 나에게 많은 시간을 절약 할 수있다. – Alter

답변

1

이 내가 그것을 수행합니다 getFunction에 암호를 모듈화 얼마나 내 lock_unlock VBA 스크립트의 위생적 버전입니다.

ex. 이제

Function getPassword() 
    getPassword = "password1" 
End Function 

, 비밀번호 통화 Application.Run(ActiveWorkbook.Name & "!getPassword")를 할 때이 암호에 관계없이 통합 문서의 매크로가

예에서 실행되고, 현재 통합 문서에서 검색되었는지 확인합니다.

Sub test() 
    MsgBox Application.Run(ActiveWorkbook.Name & "!getPassword") 
End Sub 

Function getPassword() 
    getPassword = "hello" 
End Function 

옵션 2 : 그 다음 내가 암호를 얻기 위해 사용되는 것과 동일한 방법을 사용하여 activeworkbook에서 매크로를 호출하지 않은 경우에서 ThisWorkbook에서, ActiveWorkbook되어 있는지 확인합니다.

+0

D' oh! 내가 왜 그렇게 생각하지 않았어? 나는 이미 암호가 당신이 제안한 것과 같은 함수에서 되돌려 받았기 때문에 (지금은 매번 업데이트하기가 더 쉽다). 도와 주셔서 감사합니다! – JMichael