excel 显示日期/时间时出现运行时错误1004

8yoxcaq7  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(372)

下面的代码用于识别工作簿中任何工作表上发生的更改。然后在发生更改的工作表上,在单元格B1中显示日期+时间,并在D1中显示进行更改的用户。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    With Sh
        If Intersect(Target, Range("A1:D1")) Is Nothing Then
            ActiveSheet.Range("B1").Value = Format(Now(), "dd/mm/yyyy - hh:mm:ss")
            ActiveSheet.Range("D1").Value = Application.UserName
        Else
        End If
    End With
End Sub

但代码错误时,试图采取行动,如复制+粘贴单元格在一个工作表或跨越2

尝试寻找解决方案并使用不同的语法(如wsPOD而不是Activesheet),但要么是相同操作的错误,要么是任何更改的错误。

zdwk9cvp

zdwk9cvp1#

工作簿工作表变更:时间戳和用户

  • 如果不禁用事件,则每次向单元格写入数据时都会触发该事件,从而导致无限循环,可能导致Excel崩溃。
  • 此外,您还应该使用:
If Not Intersect(Target, .Range("A1:D1")) Is Nothing Then

关注Not,以及Range前面的点,即.Range。下面的代码使用相反的方法退出该过程。

法典

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    ' Restrict to a range e.g. 'A1:D1'
    If Intersect(Target, Sh.Range("A1:D1")) Is Nothing Then Exit Sub
    ' Out-comment the above line to use for a change in any cell.
    
    Application.EnableEvents = False ' to not retrigger the event
        Sh.Range("B1").Value = Format(Now, "dd/mm/yyyy - hh:mm:ss")
        Sh.Range("D1").Value = Application.UserName
    Application.EnableEvents = True

End Sub

相关问题