2016-07-18 7 views
2

비밀번호가있는 시트가 있습니다. 내가 VBA와 그 시트에 아무것도 변경할 때 나는이 같은 보호를 해제 :비보호 시트를 수정할 수 없습니다.

For j = 13 To 12 + numberofsomething 
    With Range("H" & j & ":L" & j).Borders 
     .LineStyle = xlContinuous '<---Here 
     .Weight = xlMedium 
     .Color = RGB(255, 0, 0) 
    End With 
Next j 

Run-time error: 1004 Unable to set the LineStyle proprety of the Borders class

문제가 될 수 무엇 :

Private Sub Worksheet_Change(ByVal target As Range) 
    ActiveSheet.Unprotect Password:="pass" 

    'do stuffs 

    ActiveSheet.Protect Password:="pass" 

End Sub 

문제는 아직도이 줄을이 오류 메시지가 있다는 것입니다 ?

+0

두 번째 코드 블록이 어떻게 실행되고 있는지 보여 주시겠습니까? 내가 복사 – Gareth

+0

블록 코드처럼, IF 문에 있습니다 만약 target.Address = "$의 H $ 5"그리고 ..... 끝 그게 모든 – PyVas

+0

는 경우'Worksheet_Change' 절차에 ? – Gareth

답변

1

때마다 워크 시트를 보호하고 보호를 해제하는 것은 효율적이지 않습니다.

다음과 같이 모든 시트를 보호 할 수 있습니다. 테두리가 이미있는 경우 Excel에서 문제가 발생하기 때문에 B 순서를 없음으로 설정하기 만하면됩니다.

Private Sub Workbook_Open() 
    Dim wks As Worksheet 

    'Loop over all Sheets 
    For Each wks In ActiveWorkbook.Worksheets 

    wks.Protect Password:="Secret", _ 
    UserInterFaceOnly:=True 
    Next wks 

End Sup 

UserInterFaceOnly는 True로 설정할 수있는 Protect Method의 옵션 인수이며 기본값은 False입니다. 이 인수를 True로 설정하면 모든 Excel VBA 매크로를 암호가 있거나 없음으로 보호 된 워크 시트에서 실행할 수 있습니다. 따라서 워크 시트 보호를 항상 해제 할 필요가 없습니다.

다른 문제의 경우 Excel에서 테두리가 모두 설정되어있는 경우 문제가 발생하는 경우가 있습니다. 따라서 변경하기 전에 테두리를 없음으로 설정하십시오.

For j = 13 To 20 
    With Range("H" & j & ":L" & j).Borders 
     .LineStyle = xlNone 
    End With 
    With Range("H" & j & ":L" & j).Borders 
     .LineStyle = xlContinuous '<---Here 
     .Weight = xlMedium 
     .Color = RGB(255, 0, 0) 
    End With 
Next j 
+0

UserInterfaceOnly 모드를 이미 시도했지만 통합 문서를 다시 열 때까지만 작동합니다. 그 후에는 암호가 활성화되어 있지만 매크로는 셀 값을 변경할 수 없습니다. 주석의 두 번째 부분은 사실이지만 이상한 것은 코드 설정 테두리의 다른 부분에서 이미 설정되어있을 때 아무런 문제가 없다는 것입니다. – PyVas

+0

@PyVa 그래서 ThisWorkbook에서 Workbook Open 이벤트에 UserInterfaceOnly로 루프를 삽입해야합니다. 따라서이 강령은 통합 문서를 열 때마다 실행됩니다. – Moosli

+0

@PyVas Rutine에서 테두리를 없음으로 설정하거나 오류 Aswell이 발생하면 코드에서 작동합니까? – Moosli