2017-04-20 160 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