在编程方面,我远远不如新手,因为我在网上找到了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,则弹出窗口 不会弹出,但是该行也不会被删除或添加。
有什么办法解决这个问题?还是我注定每次需要添加或删除行时都要按结束键?
编辑:
忘记提及Debug突出显示sNew = Target.Value 'capture new value
是问题所在。
答案 0 :(得分:1)
Target
可以是一个多单元格范围(如添加新行时),因此在那种情况下,您不能将其值分配给String型变量。
您可以通过以下方式屏蔽全列更改:
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