类型13不匹配错误

时间:2015-12-28 23:45:15

标签: excel vba

我在使用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

1 个答案:

答案 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并不被视为“最佳做法”。