2017-08-07 93 views
0

我有解鎖特定範圍(D6:BC116)在Excel工作表。它應該能夠讓其他人編輯這個特定的區域。所以應該爲他們解鎖。 起初,我手動保護整張紙,沒有任何代碼。之後,我想取消保護特定區域進行編輯。但是總是出問題。我有這兩個代碼。第一個代碼具有隱藏屬性,它只隱藏空單元格。我試圖解除保護整張表格後我要編輯的特定區域的其他代碼。 由於隱藏屬性,我不確定問題出在第一個代碼中嗎?我不確定他們是否處於關係中?解鎖特定區域在受保護的excel表與VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
For Each cell In Range("B6:B112") 
If cell.Value <> "" Then 
cell.EntireRow.Hidden = False 
Else 
cell.EntireRow.Hidden = True 
End If 
Next cell 
End Sub 

Sub UnlockCells() 

Worksheets("Sheet1").Range("D6:BC116").Locked = False 
Worksheets("Sheet1").Protect 

End Sub 

當我執行此我總是得到「索引超出範圍」

謝謝!

+0

究竟從哪裏得到的錯誤? – Vityata

+0

我得到的錯誤在_cell.EntireRow.Hidden = False_,我不知道爲什麼我的 – flowers1234

回答

1

我想你需要解鎖前取消保護。 像這樣:

With Worksheets("Sheet1") 
.Unprotect "MyLongAndSecurePassword" 
.Range("D6:BC116").Locked = False 
.Protect 
End with 

關於代碼的第一部分 - 確保您使用一個變量,一個未命名cell,因爲cell使用由VBEditor。將您的變量命名爲rngCell,myCell或除cell之外的任何其他名稱。並聲明如下:Dim rngCell as Range

末點 - 鎖定您的工作表,並試圖隱藏和取消隱藏手動行。可能嗎?如果不是,你知道錯誤的原因。

編輯:

要檢查表是否是受保護的,試試這個在Worksheet_Change

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Worksheets("Sheet1").ProtectContents Then Exit Sub 

    For Each cell In Range("B6:B112") 
     If cell.Value <> "" Then 
      cell.EntireRow.Hidden = False 
     Else 
      cell.EntireRow.Hidden = True 
     End If 
    Next cell 

End Sub 
+0

tablename是「Tabelle1」,但我又得到一個錯誤「索引超出範圍」 – flowers1234

+0

這裏是錯誤_cell.EntireRow.Hidden = False_真的不知道爲什麼 – flowers1234

+0

您是否在我的答案中嘗試了3種解決方案? @ flowers1234如果您的工作表名爲'Tabelle1' - 這是您應該在代碼中使用的名稱。 – Vityata