vba - 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
为问题。
解决方案
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
推荐阅读
- react-native - React Native Android:如何能够访问不同的 Textinput 字段?
- karate - 当我们在另一个 API 命中中使用该访问令牌时,缓存的响应会增加服务器中的命中次数
- python - 从键/值字典中丰富我的列表
- commit - 基于提交点,我们可以查询 JFrog 并获取工件吗?
- next.js - 将远程和本地图像与 next/image 一起使用
- android - 如何将我的视频流(来自 android 应用程序)发送到 Ant 媒体服务器?
- flutter - RenderBox 没有布局 Flutter listview
- javascript - React-native 自动完成问题(“对象作为 Reach 子项无效”)
- javascript - 我想获取用于服务器端处理的 Foo 表的页码
- excel - Excel - 查找和替换或匹配?