我在使用Excel VBA时收到13类不匹配错误。此脚本检查两列并在更改后锁定列中的单元格,或者如果用户单击单元格并单击而不进行任何更改,则不会锁定它。第5行显然是罪魁祸首。非常感谢任何帮助。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range
Set A = Union(Range("I:I"), Range("J:J"))
If Intersect(Target, A) Is Nothing Then Exit Sub
If Target.Value = "" Then Exit Sub
ActiveSheet.Unprotect Password:="YourPassword"
Target.Locked = True
ActiveSheet.Protect Password:="YourPassword"
End Sub
答案 0 :(得分:1)
目标是已更改的一个或多个单元格。如果Target不仅仅是一个单元格(例如粘贴的值块等),那么Target没有.Value。将If Target.Count > 1 Then Exit Sub
添加到代码顶部或循环执行Target,检查Target中的每个单元格以获取.Value。
后者的例子,
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union(Range("I:I"), Range("J:J"))) Is Nothing Then
On Error GoTo bm_Safe_Exit
ActiveSheet.Unprotect Password:="YourPassword"
Application.EnableEvents = True
Dim ij As Range
For Each ij In Intersect(Target, Union(Range("I:I"), Range("J:J")))
If ij.Value <> "" Then
ij.Locked = True
End If
Next ij
End If
bm_Safe_Exit:
ActiveSheet.Protect Password:="YourPassword"
Application.EnableEvents = True
End Sub
此外,在ActiveSheet property事件宏中使用Worksheet_Change并不被视为“最佳做法”。