2017-11-01 17 views
0

필자는 직원들이보고해야하는 특정 네트워크에 Excel 시트가 있습니다. 나는 그것을 암호로 보호하도록 만들었지 만 파일 경로 나 디렉토리가 변경되면 파일이 열리지 않아야하는 VBA로 보호하려고합니다. 예를 들어, 파일이 "C : \ Excel \ Book1.xlms"에있는 경우, 파일이 항상 열리거나 파일이 열리지 않아야합니다.Excel 파일을 이동 또는 복사로부터 보호해야합니다.

+0

파일이 열려있는 통합 문서에 대한 제재 네트워크 디렉토리에 위치하고 있는지 여부를 테스트하는 모듈을 작성합니다. 현재 통합 문서의 경로를 테스트하고 승인 된 위치 목록을 확인하기 만하면됩니다. 지금까지 시도한 코드를 게시 할 수 있습니까? – MoondogsMaDawg

+0

100 % 파일을 복사하거나 이동하지 못하게 할 수있는 방법은 없습니다. 이것은 프로그래밍 문제가 아니라 사람들의 관심사입니다. 예를 들어, 전자 메일에 첨부하여 자신에게 보내고 첨부 파일을 엽니 다. Excel은 매크로를 기본적으로 사용하지 않도록 설정하여 VBA의 "보호"를 무력화합니다. –

답변

1

Open 이벤트에 주소를 하드 코딩하여 파일이 동일한 지 확인할 수 있습니까?

Private Sub Workbook_Open() 
If "C:\Excel\" <> ThisWorkbook.Path Then ThisWorkbook.Close 

End Sub 
+0

통합 문서 이름을 변경할 수 있도록 허용하는 올바른 호출입니다. 나는 그것에 대해 생각하지 않았다. –

+0

"파일 경로 또는 디렉토리가 변경된 경우"라는 질문에 이름이 명시되어 있지 않습니다. – mooseman

+0

물론, 사용자는 파일을 .xlsx로 저장 한 다음 닫고 열어서이를 피할 수 있습니다. – MarcinSzaleniec

1

통합 문서를 열어 파일 이름을 확인할 때마다 트리거되도록 이벤트를 설정하십시오. 파일 이름이 지정된 경로가 아니면 통합 문서를 닫습니다.

은 VBA 편집기에서 ThisWorkbook의 코드를 붙여 넣습니다

Private Sub Workbook_Open() 

    Dim FileLoc, MyPath As String 
    FileLoc = ThisWorkbook.Path 
    MyPath = "C:\Excel\" 

    If FileLoc <> MyPath Then 
     MsgBox ("The workbook was not in the required filepath." _ 
      & vbNewLine & "The reuqired filepath is: " & MyPath _ 
      & vbNewLine & "The current filepath is: " & FileLoc) 
     Application.DisplayAlerts = False 
     ThisWorkbook.Close 
    End If 

End Sub