Excel 为什么我的VBA仅在某些部分停止工作?

Excel 为什么我的VBA仅在某些部分停止工作?,excel,vba,excel-formula,excel-2019,vba7,Excel,Vba,Excel Formula,Excel 2019,Vba7,最近VBA已停止工作。通常,当您在列C中输入数据时,它会自动将今天的日期填充到列B,当您在列K中输入数据时,它还会将今天的日期填充到列R 我最近在保护床单上搞砸了,最后我放弃了,我觉得这与此有关 这很奇怪,因为VBA的其他领域仍然有效 如何解决这个问题,使VBA仍然自动填充它需要的列 With Target If .Count > 1 Then Exit Sub If Not Intersect(Range("C:C

最近VBA已停止工作。通常,当您在列
C
中输入数据时,它会自动将今天的日期填充到列
B
,当您在列
K
中输入数据时,它还会将今天的日期填充到列
R

我最近在保护床单上搞砸了,最后我放弃了,我觉得这与此有关

这很奇怪,因为VBA的其他领域仍然有效

如何解决这个问题,使VBA仍然自动填充它需要的列

        With Target
            If .Count > 1 Then Exit Sub
            If Not Intersect(Range("C:C"), .Cells) Is Nothing Then
                Application.EnableEvents = False
                If IsEmpty(.Value) Then
                    .Offset(0, -1).ClearContents
                Else
                    With .Offset(0, -1)
                        .NumberFormat = "dd mmm yy"
                        .Value = Date
                    End With
                End If
                Application.EnableEvents = True
            End If
        End With
        With Target
            If .Count > 1 Then Exit Sub
            If Not Intersect(Range("K:K"), .Cells) Is Nothing Then
                Application.EnableEvents = False
                If IsEmpty(.Value) Then
                    .Offset(0, 7).ClearContents
                Else
                    With .Offset(0, 7)
                        .NumberFormat = "dd mmm yy"
                        .Value = Date
                    End With
                End If
                Application.EnableEvents = True
            End If
        End With
    
    Const sCell As String = "K2" ' Source First Cell
    Const dCol As Variant = "J" ' Destination Column Id (String or Index)
    
    Dim irg As Range ' Intersect Range
    Dim cOffset As Long ' Column Offset
    With Range(sCell)
        Set irg = Intersect(.Resize(.Worksheet.Rows.Count - .Row + 1), Target)
        If irg Is Nothing Then Exit Sub
        cOffset = Columns(dCol).Column - .Column
    End With
    
    Dim arg As Range ' Current Area of Intersect Range
    Dim cel As Range ' Current Cell in Current Area of Intersect Range
    For Each arg In irg.Areas
        For Each cel In arg.Cells
            If Not IsError(cel.Value) Then
                cel.Offset(, cOffset).Value = cel.Value
            End If
        Next cel
    Next arg
    
End Sub```

使用错误处理程序确保事件未关闭的示例:

Private子工作表\u更改(ByVal目标作为范围)
调光范围
如果Target.Cells.CountLarge>1,则退出Sub
如果Target.Column=3,则
设置c=目标偏移量(0,-1)
ElseIf Target.Column=11则
设置c=目标偏移量(0,7)
如果结束
在出现错误时转到haveError'打开错误处理
如果c不是什么,那么第3列或第11列。。。
Application.EnableEvents=False
如果Len(目标值)=0,则
c、 清晰内容
其他的
c、 NumberFormat=“dd-mmm-yy”
c、 值=日期
如果结束
Application.EnableEvents=True
如果结束
退出次正常退出此处
haveError:
MsgBox“出现错误:”&错误说明
Application.EnableEvents=True'确保事件未被忽略
端接头

可能您的活动已关闭?不,这就是它们一直以来没有问题的方式:/posted code是完整的子标题(减去子标题)吗?代码的哪些部分仍然有效?发布代码的任何部分仍然有效吗?如果转到VB编辑器中的立即窗格并粘贴
?Application.EnableEvents
然后按Enter键是否获得
True
?抱歉,我现在意识到所有代码都不起作用。是的,发布的代码是完整版本。我不知道粘贴到VB编辑器是什么意思?在同一即时窗格中,键入
Application.EnableEvents=True
,然后点击enter:这将重置事件处理。在所有关闭事件的事件处理程序中,都应该有一个错误处理程序,确保在代码中出现运行时错误时重新打开它们。