首页 > 解决方案 > Worksheet_Change 防止添加行

问题描述

在编程方面,我远远低于新手,因为我在网上找到了 VBA 代码并尝试为我的目的重新配置它。

当某些单元格发生更改时,我使用下面的代码来捕获时间戳和用户名,效果很好,当我尝试添加或删除行时问题就来了。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Dim ThisRow As Long ' make sure to declare all the variables and appropriate types
    ThisRow = Target.Row

    If Target.Column >= 1 And Target.Column <= 1 Then

        Dim sOld As String, sNew As String
        sNew = Target.Value 'capture new value

        With Application
            .EnableEvents = False
            .Undo
        End With

        sOld = Target.Value 'capture old value
        Target.Value = sNew 'reset new value

        If sOld <> sNew Then

            ' time stamp & username corresponding to cell's last update
            Range("L" & ThisRow).Value = Now & Environ("username")
            Range("L:L").EntireColumn.AutoFit

        End If

        Application.EnableEvents = True

    End If
End Sub

运行时错误“13”:

弹出类型不匹配窗口。如果我点击结束,则添加或删除该行,但如果我在代码旁边添加 On Error Resume,则不会弹出弹出窗口,但该行也不会被删除或添加。

有任何解决这个问题的方法吗?还是我注定每次需要添加或删除一行时都按结束?

编辑:忘了提到调试突出显示sNew = Target.Value 'capture new value为问题。

标签: vbaruntime-errorworksheettype-mismatchonerror

解决方案


Target可以是多单元格范围(如添加新行时),因此在这些情况下,您不能将其值分配给字符串类型的变量。

不过,您可以筛选出整列更改:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    If Target.Columns.Count = Me.Columns.Count Then Exit Sub 

    'or even 
    'If Target.Cells.Count > 1 Then Exit Sub 

    'rest of code here

推荐阅读