根据A列中的值锁定或解锁B列和C列中的单元格



我正在尝试编写一个vba代码,但完全失败了。

基本意思是:

**Private Sub Worksheet_Change(ByVal Target As Range) 
ActiveSheet.Unprotect "" 
If Range("A11").Value = "NF" Then 
Range("B11 and C11").Locked = false 
ElseIf Range("A11").Value = (anything else other than NF) Then 
Range("B11 and C11").Locked = true 
End If 'Activesheet.protect "" 
End sub**

我放了A11,但实际上这必须适用于从A11到A30的每一行。

A列是员工手动填写项目编号的地方,在B和C中,我有一个搜索项目编号的vlookup,并在B中返回项目描述,在C中返回项目任务。但是,如果员工没有项目编号,他必须输入NF,这意味着他可以输入B和C来解释他在B中做了什么以及他在C中完成的任务。

因此,B和C在任何时候都是锁定的,但如果他把NF放在A阱中,B和C必须解锁,这样他才能输入这两列。他有可能进入18个项目,从第11排到第30排。

代码必须能够从第11行到第30行执行此操作。

在网上研究了两天后,这是我想出的最好的代码,我发现的所有代码要么是你输入这个做这个,要么是输入这个做那个。但在我的情况下,如果你投入这个,就这样做,如果你再投入其他东西,就这么做。就是绕不过去。

请有人帮忙。

开始吧。将此代码粘贴到相关的工作表中。确保解锁工作表的列A,以便用户即使在工作表受到保护后也可以键入值。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRange As Range
With Me
Set MyRange = .Range("A11:A20") ' Change the range according to your requirement
.Unprotect ""
If Not Intersect(Target, MyRange) Is Nothing Then
If Target.Value = "NF" Then
Target.Offset(0, 1).Locked = False
Target.Offset(0, 2).Locked = False
Else
Target.Offset(0, 1).Locked = True
Target.Offset(0, 1).Value = Application.Worksheetfunction.Vlookup(Target.value,Thisworkbook.worksheets("Project").Range("A:E"),4,0)
Target.Offset(0, 2).Locked = True
Target.Offset(0, 2).Value = Application.Worksheetfunction.Vlookup(Target.value,Thisworkbook.worksheets("Project").Range("A:E"),5,0)
End If
End If
.Protect ""
End With
End Sub

希望这有帮助:(

最新更新