Vba 带条件的工作表更改函数

Vba 带条件的工作表更改函数,vba,function,worksheet,Vba,Function,Worksheet,我试图编写一个代码,按日期按代表输入销售数据,这样他们就可以在a列中有今天日期的行中输入数据,并且所有其他行都被锁定。此外,一旦他们在该行的任何单元格中输入数据,该单元格就会被锁定 请参阅我的代码,以获得相同的信息。我在这里得到一个运行时错误。我在单元格格式中保持所有单元格处于解锁状态,并在执行此代码之前锁定了工作表 Private Sub Worksheet_Change(ByVal Target As Range) i = Target.Row If Range("A" & i

我试图编写一个代码,按日期按代表输入销售数据,这样他们就可以在a列
中有今天日期的行中输入数据,并且所有其他行都被锁定。此外,一旦他们在该行的任何单元格中输入数据,该单元格就会被锁定

请参阅我的代码,以获得相同的信息。我在这里得到一个运行时错误。我在单元格格式中保持所有单元格处于解锁状态,并在执行此代码之前锁定了工作表

Private Sub Worksheet_Change(ByVal Target As Range)

i = Target.Row  
If Range("A" & i) = Date Then

ActiveSheet.Unprotect Password:="jayant1234"
Target.Locked = True
ActiveSheet.Protect Password:="jayant1234"

Else
Target.Value = ""
MsgBox ("Don't Try To Mess Around")
End
End If
End Sub

`

考虑将目标参数作为字符串而不是范围传递

Private Sub Worksheet_Change(ByVal Target As String)

i = Range(Target).Row
If Range("A" & i) = Date Then

    ActiveSheet.Unprotect Password:="jayant1234"
    Range(Target).Locked = True
    ActiveSheet.Protect Password:="jayant1234"

Else
    Range(Target).Value = ""
    MsgBox ("Don't Try To Mess Around")
    End
End If
End Sub

Sub Test()

Worksheet_Change ("A1")

End Sub

在执行
Target.Value=”“
之前,请明确设置
Application.EnableEvents=False
(然后将其设置回
True
)否则,您将进入一个无限循环,这将使Excel崩溃。了解运行时错误是什么以及在哪一行会有帮助。最好锁定工作簿上的所有单元格,并在未启用VBA的情况下解锁工作簿上当前打开的单元格。更好地使用访问表单@YowE3K进行数据输入:我将这两行添加到代码中,这有助于避免无限循环。将其保留为
Range
,您只需执行
Target.Row
即可,即
如果Range(“A”&Target.Row)=Date。在我看来,这是更简洁的方式。此代码给出了一个错误“过程声明与事件或同名过程的描述不匹配”您不能只更改事件的过程声明-工作表\u change
事件传递了一个
范围
对象,因此,声明必须是
私有子工作表\u Change(ByVal Target作为范围)