2015-06-16 115 views
0

這是我的問題,我有我的問題,當我測試他們與解鎖表,但當我鎖定工作表,以保護某些單元格被選中或刪除/更改,subs錯誤了。所以我需要添加一個部分到我的子解鎖,運行主代碼,然後重新鎖定工作表。VBA取消保護表單,運行子表單,然後重新保護表單?

我期待這樣的事情

Sub Example() 
Dim sample as range 
set sample as range("A3:Z100") 
Application.ScreenUpdating = false 
UN-PROTECT CODE 
'Existing sub code here 
RE-PROTECT CODE 
Application.ScreenUpdating = True 
End Sub 

不過,我什麼代碼來實現這個看起來應該不知道。我已經嘗試過研究,並且我發現的所有內容都是基於評論的不完整的代碼,並沒有一直工作。我確實發現了一個錯誤建議,讓錯誤處理程序重新保護工作表,但不知道如何寫入。有什麼建議麼?

哦,並且將使用此工作表的人將無法訪問工作表密碼。我打算讓該模塊的自我密碼保護,並將子附件連接到按鈕上。因此,如果需要的話,將Sheet解鎖密碼放在子文件中就可以。

+0

如果您使用宏記錄器,然後保護&unprotect工作表,它會顯示您的代碼。 – ChipsLetten

+0

在我向代碼中添加密碼後,這樣做了,所以它不會要求它,然後添加一個事件處理程序,然後根據需要調用子代碼。請發佈一個答案,以便我可以在哪裏提供貸款。 – proxy156

回答

1

發表我的原始評論作爲答案。

如果您使用宏記錄器,然後保護&不保護表,它會顯示您的代碼。

編輯:添加下面。

如果您試圖取消保護未保護的工作表,將會收到錯誤消息。我使用此功能來測試一張紙是否受到保護,將結果存儲在Boolean變量中,然後測試該變量以查看a)該紙張在寫入之前必須是不受保護的,以及b)查看該紙張是否應該在proc結束。

Public Function SheetIsProtected(sheetToCheck As Worksheet) As Boolean 
    SheetIsProtected = sheetToCheck.ProtectContents 
End Function 
1

你需要它來刪除密碼嗎?這爲我工作

Sub macroProtect1() 

Sheet1.Unprotect Password:="abc" 

'Enable error-handling routine for any run-time error 
On Error GoTo ErrHandler 

'this code will run irrespective of an error or Error Handler 
Sheet1.Cells(1, 1) = UCase("hello") 

'this code will give a run-time error, because of division by zero. The worksheet will remain unprotected in the absence of an Error Handler. 
Sheet1.Cells(2, 1) = 5/0 

'this code will not run, because on encountering the above error, you go directly to the Error Handler 
Sheet1.Cells(3, 1) = Application.Max(24, 112, 66, 4) 

Sheet1.Protect Password:="abc" 

ErrHandler: 
    Sheet1.Protect Password:="abc" 

End Sub 
+0

無法讓我爲此工作。但它的確幫我編寫了ErrorHandler。 – proxy156

+0

@ proxy156是否在沒有密碼部分的情況下嘗試使用它?這是選項,並假定你有密碼。 –

0

最常見的對象,它是保護是工作表對象這使人們有可能通過保留公式鎖定包含它們的細胞。

Sub Demo() 
    Dim sh As Worksheet 
    Set sh = ActiveSheet 

    sh.Unprotect 
     ' DO YOUR THING 
    sh.Protect 
End Sub 
0

有類似的問題,結果發現在網絡上的代碼: 子protectAll() 昏暗mycount的 昏暗我 mycount的= Application.Sheets.Count 表(1)。選擇 對於i = 1到mycount的 個ActiveSheet.Protect 「密碼」,真,真 若i = mycount的然後 結束 結束如果 ActiveSheet.Next.Select 下一I 結束子

Sub Unprotect1() 
    Dim myCount 
    Dim i 
    myCount = Application.Sheets.Count 
    Sheets(1).Select 
     For i = 1 To myCount 
      ActiveSheet.Unprotect "password" 
      If i = myCount Then 
      End 
     End If 
     ActiveSheet.Next.Select 
    Next i 
End Sub 

請注意,它旨在保護/取消保護工作簿中的所有工作表,並且工作正常。道歉,並尊重,原始作者,我不記得我在哪裏找到它(但我不要求它)...

+0

您可以直接循環查看工作表,而無需使用'myCount'或'If i = myCount Then'代碼。 – ChipsLetten