2012-11-08 229 views
1

我一直在尋找一個代碼鎖定在表中的所有細胞,但之一,我發現這個代碼:鎖定/解鎖細胞VBA

Worksheets("SW").Range("D2").Locked = False 
Worksheets("SW").Protect UserInterfaceOnly:=True 

它確實工作得很好,直到我救了它,並關閉/打開該文件再次,然後我運行的任何宏。

我想這是因爲在這片我有不同的宏,還我,當一個小區改變運行宏:

Private Sub Worksheet_Change(ByVal Target As Range) 

你有任何想法如何使它工作嗎?

還有一件事,這個工作簿將被共享,所以我不知道這會影響宏。

對不起,也許我太模棱兩可了。

是的我想防止他人改變細胞的價值。

我想只有一個單元格可以改變,所以其他所有單元格都隨着宏而改變。再次

感謝您的幫助

PS:是的艾哈邁德·木塔瓦,我想是不可能的昌板材即使該項目被保存,關閉和打開。

如果您需要更多信息,請告訴我,我會盡量做得更具體。

+1

我覺得你忘了你的一半解釋;) – Jook

+1

目前還不清楚你想完成什麼。即使在保存關閉/重新打開 – Ahmad

回答

0

您的文件是否有任何其他操作,而不是您想要實現的鎖定解鎖代碼的宏?

如果是這樣,我建議你在vba中有一個代碼。否則,您可以簡單地鎖定工作表以防止用戶在沒有代碼的情況下隨時更改某些內容。

你認爲這可能比[code] [1]更好嗎?

[http://office.microsoft.com/en-us/excel-help/lock-or-unlock-specific-areas-of-a-protected-worksheet-HA010096837.aspx] [1]

出於好奇:以任何機會,你有不知道在哪裏以及如何觸發這個代碼塊的問題嗎?

編輯代碼: - 您的評論不清楚,無可非議我相信你想使用一個宏。 假設您想要保護/鎖定或取消保護Sheet1,請嘗試以下操作。 : -

添加在打開工作簿時這些代碼的ThisWorkbook: -

Private Sub Workbook_Open() 
    Dim shtSheet As Worksheet 
    Dim strPassword As String 

    strPassword = "stack" 
    Set shtSheet = Worksheets("Sheet1") 
    shtSheet.Protect Password:=strPassword, UserInterfaceOnly:=True 
End Sub 

下一頁添加你的模塊在下面。並在完成宏的運行後調用它。

Sub ProtectSheet() 
    Dim shtSheet As Worksheet 
    Dim strPassword As String 

    strPassword = "stack" 
    Set shtSheet = Worksheets("Sheet1") 
    shtSheet.Protect strPassword 
End Sub 
+0

之後,是否還想阻止人們更改表單?問題是,我運行了可更改鎖定單元格值的宏,因此我需要一些代碼將其排除。我想也許用我的上層代碼可以工作,直到我關閉並再次打開。 – themolestones

+0

不,這不是我的問題,問題在於當我鎖定工作表時,我的宏不運行,只是第一次運行,當工作簿關閉並打開時出現問題。對不起,也許我的英文不太清楚,但我希望我能更好地解釋它,對不起,謝謝 – themolestones

+0

對不起,我無法理解你的問題。 Perhas的標題是誤導性的。讓我們稍微改變一下這段代碼:您可以在UserInterfaceOnly爲true的情況下將第一個取消保護代碼段放入Workbook打開事件中。 然後將Protect sub添加到主模塊的末尾。當你的宏完成時,表格將被完全保護。 我編輯了代碼。 – bonCodigo