2017-04-20 159 views
0

所以基本上我想鎖定B2:B7 B1 < 0,當B2:B7 = 0,當B2:B7爲空時。鎖定單元格小於零和空單元格VBA Excel

這是我到目前爲止。

SN:我剛開始這個,所以我對某些事情有點無知。

Sub test_lock() 

If Range("B1") < 0 And Range("B2:B7") Then 
    Range("B2:B7").Locked = True 

ElseIf Range("B2:B7") > 0 Then 
    Range("B2:B7").Locked = False 

End If 

For Each rngTemp In Range("B2:B7").Cells 
     With rngTemp 
      If .Value > 0 Or Len(.Value) > 0 Then 
       .Locked = False 
      End If 
     End With 
    Next 
End Sub 

回答

0

這樣的事情如何?它鎖定了整個範圍,然後解鎖需要的東西。

通過建立範圍然後一次全部解鎖,如果單元數量很高,它應該工作得更快。

請注意註釋掉的行,這只是將未鎖定的單元格變爲綠色以便於檢查。

Sub temp() 
Dim rCell As Range 
Dim inRng As Range 
Dim rRng As Range 

set myRng = Range("A1:B2") 

myRng.Locked = True 
For Each rCell In myRng 
    If rCell.Value > 0 Then 
     If rRng Is Nothing Then 
      Set rRng = rCell 
     Else 
      Set rRng = Application.Union(rRng, rCell) 
     End If 
     End If 
    Next 
    rRng.Locked = False 
    'rRng.Interior.ColorIndex = 4 
End Sub 
+0

非常感謝您的幫助我認爲它的工作,但有一個小問題。它給我運行時錯誤'91':對象變量或塊變量未設置,當我調試它亮點rRng.Locked = False – sa7

+0

是否有任何需要解鎖的單元格。如果rRng爲空,可能會導致錯誤。另外我注意到我的初始範圍是不同的,那麼你是否改變了這一點。 – gtwebb