微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Excel VBA - 当用户输入数字和算术运算但处理日期时自动添加“=”

如何解决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-28/9 之类的值,则无法在 Excel 将其更改为日期格式之前拦截单元格发生的更改

但是有一个解决方案,尽管它可能不适合您的目的。

  1. 将您要应用它的每个单元格的格式(大概是 C4:C303)设置为“Text”或“@”。

  2. 在设置单元格的值之前更改您的代码以包括添加 Target.NumberFormat = "General"

实现该目标的代码如下所示:

...
Application.EnableEvents = False
TempTarget = Target

' Add this line to change the format back to General
Target.NumberFormat = "General"

Target = "=" & TempTarget
...

然后这将正确处理 5-28/9 之类的情况,否则这些情况会自动成为日期。

副作用

这会产生一种不希望的副作用,如果以后再次编辑现有计算单元格之一,它现在将采用“General”格式而不是文本。

这可以通过使用 SelectionChange 事件并再次将单元格的格式设置为“Text”或“@”来解决(如果它在您正在处理的范围内) ,但如果用户不编辑单元格的值,您可能希望撤消该操作。

有点乱。 Excel 显然不适合这种方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。