【发布时间】:2019-03-14 19:58:07
【问题描述】:
我正在为我所在地区的员工制作防错工作表。我们的系统需要通过 excel 工作表进行输入。连同我已经添加的其他验证,我需要将生日日期转换为格式YYYYMMDD 作为字符串/数字,因为在 Excel 上使用自定义格式切换它会在上传时在系统上抛出错误(我猜它仍然会读取日期作为 DD/MM/YYYY)。
所以我尝试使用Worksheet_Change(),所以当用户输入任何日期为DD/MM/YYYY 时,它会自动转换为所需的结果。
If Not Intersect(Target, Columns("G")) Is Nothing Then
On Error Resume Next
fecnacadd = Target.Address
fecnac = Target.Value
fecnacadd = Format(fecnac, "yyyymmdd")
Columns("G").NumberFormat = "General"
End If
这段代码在调试(正确显示“YYYYMMDD”)时运行异常,但按原样运行,将宏循环 (?) 10 秒,然后删除单元格中的内容。
感谢我代码中的任何提示。
【问题讨论】:
-
也许您通过更改列
G中的单元格的值导致了无限循环,这会导致此代码再次运行。在此子例程的开头添加Application.EnableEvents = False,并在末尾将其切换回True。 -
您必须在处理捕获的事件期间禁用工作表事件,以避免创建无限(或至少长时间运行)循环。设置
Application.EnableEvents = False,完成后别忘了重新启用它。 -
为什么是
On Error Resume Next?如果你有一个预期的错误,你应该测试它。否则,您可能会错过应该处理的错误。 -
@JNevill 它确实退出了循环没问题,谢谢。虽然有什么方法可以覆盖无格式数据吗?我仍然有问题。
-
@RonRosenfeld 因为同时删除多个单元格时它不能正确处理指令(内存错误)
标签: excel vba worksheet-function