如何解决Excel VBA - 当用户输入数字和算术运算但处理日期时自动添加“=”
为了避免用户在单元格中输入算术运算(即 5+2、8*8 等)之前输入 =,我有以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target,Range("C4:C303")) Is nothing Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
TempTarget = Target
Target = "=" & TempTarget
If IsError(Target) Then Target = TempTarget
Application.EnableEvents = True
End If
On Error GoTo 0
结束子
它适用于加法 (5+5) 和乘法 (9*55),但不适用于小数 (5-2,8/9) 的除法和减法,因为 Excel 将它们视为日期。它适用于较大数字(不能是日期)的减法和除法。我想在单元格中有算术公式但显示结果。如何修复代码以使其始终按我想要的方式工作?
解决方法
这并不像看起来那么容易解决。如果您输入 5-2
或 8/9
之类的值,则无法在 Excel 将其更改为日期格式之前拦截单元格发生的更改。
但是有一个解决方案,尽管它可能不适合您的目的。
-
将您要应用它的每个单元格的格式(大概是
C4:C303
)设置为“Text
”或“@
”。 -
在设置单元格的值之前更改您的代码以包括添加
Target.NumberFormat = "General"
。
实现该目标的代码如下所示:
...
Application.EnableEvents = False
TempTarget = Target
' Add this line to change the format back to General
Target.NumberFormat = "General"
Target = "=" & TempTarget
...
然后这将正确处理 5-2
或 8/9
之类的情况,否则这些情况会自动成为日期。
副作用
这会产生一种不希望的副作用,如果以后再次编辑现有计算单元格之一,它现在将采用“General
”格式而不是文本。
这可以通过使用 SelectionChange
事件并再次将单元格的格式设置为“Text
”或“@
”来解决(如果它在您正在处理的范围内) ,但如果用户不编辑单元格的值,您可能希望撤消该操作。
有点乱。 Excel 显然不适合这种方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。