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

Excel VBA - Automatically add "=" when user input numbers and arithmetic operations but taking care of dates

为了避免用户在单元格中输入算术运算(即 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 显然不适合这种方法。