Vba 下拉列表审核日志出现错误13

Vba 下拉列表审核日志出现错误13,vba,excel,Vba,Excel,我正在为一份报告做一个审计日志。报告的内容之一是状态部分,可以通过下拉列表进行选择。这是我的密码 Option Explicit Dim PreviousValue As Variant Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D2")) Is Nothing Then Range("E" & Target.Row &a

我正在为一份报告做一个审计日志。报告的内容之一是状态部分,可以通过下拉列表进行选择。这是我的密码

Option Explicit
Dim PreviousValue As Variant  



Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("D2")) Is Nothing Then
        Range("E" & Target.Row & ":F" & Target.Row).ClearContents
        If Range("D2").Value = "I/C" Then
        Range("E" & Target.Row).Locked = True
        Range("E" & Target.Row & ":F" & Target.Row).ClearContents
        Else
        Range("E" & Target.Row).Locked = False
        End If

    End If

    If Not Intersect(Target, Range("D3")) Is Nothing Then
         Range("E" & Target.Row & ":F" & Target.Row).ClearContents
    End If
    If Not Intersect(Target, Range("D4")) Is Nothing Then
        Range("E" & Target.Row & ":F" & Target.Row).ClearContents
    End If
    If Not Intersect(Target, Range("D5")) Is Nothing Then
         Range("E" & Target.Row & ":F" & Target.Row).ClearContents
    End If

    Sheets("GC-01 History Log").Cells(1, 1).Value = "Date"
    Sheets("GC-01 History Log").Cells(1, 2).Value = "Equipment"
    Sheets("GC-01 History Log").Cells(1, 3).Value = "Old Status"
    Sheets("GC-01 History Log").Cells(1, 4).Value = "New Status"
    Sheets("GC-01 History Log").Cells(1, 5).Value = "Old Reason"
    Sheets("GC-01 History Log").Cells(1, 6).Value = "New Reason"
    Sheets("GC-01 History Log").Cells(1, 7).Value = "Old Action"
    Sheets("GC-01 History Log").Cells(1, 8).Value = "New Action"

    If Target.Value <> PreviousValue Then
   Sheets("GC-01 History Log").Cells(65000, 1).End(xlUp).Offset(1, 0).Value = Now
   Sheets("GC-01 History Log").Cells(65000, 2).End(xlUp).Offset(1, 0).Value = Range(Target.Address).Offset(0, -1)
   Sheets("GC-01 History Log").Cells(65000, 3).End(xlUp).Offset(1, 0).Value = Target.Cells(Target.Row, 1)
   Sheets("GC-01 History Log").Cells(65000, 4).End(xlUp).Offset(1, 0).Value = Target.Value

End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target.Value

End Sub
选项显式
将以前的值变为变量
私有子工作表_更改(ByVal目标作为范围)
如果不相交(目标,范围(“D2”)为零,则
范围(“E”和Target.Row&“:F”和Target.Row).ClearContents
如果范围(“D2”).Value=“I/C”,则
范围(“E”和Target.Row).Locked=True
范围(“E”和Target.Row&“:F”和Target.Row).ClearContents
其他的
范围(“E”和Target.Row).Locked=False
如果结束
如果结束
如果不相交(目标,范围(“D3”)为零,则
范围(“E”和Target.Row&“:F”和Target.Row).ClearContents
如果结束
如果不相交(目标,范围(“D4”)为零,则
范围(“E”和Target.Row&“:F”和Target.Row).ClearContents
如果结束
如果不相交(目标,范围(“D5”)为零,则
范围(“E”和Target.Row&“:F”和Target.Row).ClearContents
如果结束
表格(“GC-01历史记录”)。单元格(1,1)。Value=“日期”
表格(“GC-01历史记录”)。单元格(1,2)。Value=“设备”
表格(“GC-01历史记录”)。单元格(1、3)。Value=“旧状态”
表格(“GC-01历史记录”)。单元格(1,4)。Value=“新状态”
表格(“GC-01历史记录”)。单元格(1,5)。Value=“旧原因”
表格(“GC-01历史记录”)。单元格(1,6)。Value=“新原因”
表格(“GC-01历史记录”)。单元格(1,7)。Value=“旧操作”
表格(“GC-01历史记录”)。单元格(1,8)。Value=“新操作”
如果Target.Value PreviousValue,则
表格(“GC-01历史记录”)。单元格(65000,1)。结束(xlUp)。偏移量(1,0)。值=现在
表格(“GC-01历史记录”)。单元格(65000,2)。结束(xlUp)。偏移量(1,0)。值=范围(目标地址)。偏移量(0,-1)
表格(“GC-01历史记录”)。单元格(65000,3)。结束(xlUp)。偏移量(1,0)。值=目标。单元格(目标。行,1)
表格(“GC-01历史记录”)。单元格(65000,4)。结束(xlUp)。偏移量(1,0)。值=目标值
如果结束
端接头
专用子工作表\u选择更改(ByVal目标作为范围)
PreviousValue=Target.Value
端接头
问题是,当我试图通过下拉菜单更改状态时。抛出错误13。我不知道如何处理这件事

编辑:-调试时显示错误为“Target.Value PreviousValue Then”

请帮我做两件事:

第一:这个

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    PreviousValue = Target.Value
End Sub
只有在实际更改选择时才有效。因此,这可能会导致
PreviousValue
为空

第二,也是更重要的:

您想将
PreviousValue
声明为
Public
,否则不能在两个子例程中使用它

Option Explicit
Public PreviousValue As Variant
...

是您想要的。

可能重复我阅读了链接,但我仍然不知道如何自己修复它。错误13表示它们属于不同类型。它可能是由
以前的值
引起的,因此您应该对此进行验证,您建议如何改进该值以使更改生效?