Vba 专用子系统上的excel类型不匹配错误

Vba 专用子系统上的excel类型不匹配错误,vba,excel,error-handling,Vba,Excel,Error Handling,我有一个sub,当相应的单元格发生更改时,它应该会更新单元格的值,但我不断收到一个错误,显示错误13类型不匹配,我查找了这个问题的所有可能来源,无法找出是什么原因造成的,下面是我提出问题的代码: Private Sub Worksheet_Change(ByVal Target As range) 'Adds unique keyA values 'Check to see if the changed cell is in column H If Not Intersect(Targe

我有一个sub,当相应的单元格发生更改时,它应该会更新单元格的值,但我不断收到一个错误,显示错误13类型不匹配,我查找了这个问题的所有可能来源,无法找出是什么原因造成的,下面是我提出问题的代码:

Private Sub Worksheet_Change(ByVal Target As range)
'Adds unique keyA values
'Check to see if the changed cell is in column H
    If Not Intersect(Target, range("H:H")) Is Nothing Then

        If Target.Cells.Value <> "" And Target.Row > 7 And Target.Row <= 20 Then

'Update the "KeyA" value
            range("A" & Target.Row).Value = Now()

        End If

    End If
'Adds unique keyB values
'Check to see if the changed cell is in column J
    If Not Intersect(Target, range("J:J")) Is Nothing Then

        If Target.Cells.Value <> "" And (Target.Row > "7" And Target.Row <= "27") Then

'Update the "KeyB" value
            range("M" & Target.Row).Value = Now()

        End If

    End If

End Sub
Private子工作表\u更改(ByVal目标作为范围)
'添加唯一的keyA值
'检查更改的单元格是否在H列中
如果不相交(目标,范围(“H:H”))则为零

如果Target.Cells.Value“”和Target.Row>7和Target.Row您忘记了
Target
是一个范围,不一定只包含一个单元格。如果您稍微调整一下代码,它应该可以工作:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cell As Range

'Adds unique keyA values
'Check to see if the changed cell is in column H
If Not Intersect(Target, Range("H:H")) Is Nothing Then
    For Each cell In Target.Cells
        If cell.Value <> vbNullString And Target.Row > 7 And Target.Row <= 20 Then
            'Update the "KeyA" value
            Range("A" & Target.Row).Value = Now()
        End If
    Next cell
End If

'Adds unique keyB values
'Check to see if the changed cell is in column J
If Not Intersect(Target, Range("J:J")) Is Nothing Then
    For Each cell In Target.Cells
        If cell.Value <> vbNullString And (Target.Row > "7" And Target.Row <= "27") Then
            'Update the "KeyB" value
            Range("M" & Target.Row).Value = Now()
        End If
    Next cell
End If

End Sub
选项显式
私有子工作表_更改(ByVal目标作为范围)
暗淡单元格作为范围
'添加唯一的keyA值
'检查更改的单元格是否在H列中
如果不相交(目标,范围(“H:H”))则为零
对于Target.Cells中的每个单元格

如果cell.Value vbNullString和Target.Row>7和Target.Row是什么?当你在工作表的H或J栏中删除某个内容时,你会得到错误?确切地说,我甚至在删除它的代码中,给每个单元格命名并设置其值=“如果不是空(目标)
option explicit在第一行代码中做了什么?如果你不理解关键字,只需突出显示即可(选择)它,然后按F1
。这将引导您进入以下网站:基本上,它表示代码中的所有变量都必须声明(使用
Dim
)在它们可以被使用之前。这只是为了良好的编码实践,上面的代码没有那一行就可以工作。我只是把它包括在我所有的模块中。如果你想的话,你可以删除它。