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将单元格更改为Date格式之前,无法截取单元格发生的更改。

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

  1. 将要将其应用于的每个单元格的格式(推测为C4:C303(设置为";CCD_ 4";或";@";。

  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等情况,否则这些情况将自动变为日期。

副作用

这产生了不希望的副作用,即如果稍后再次编辑现有计算单元中的一个;CCD_ 9";格式而不是文本。

这可以通过使用CCD_ 10事件并通过将单元的格式设置为"0"来解决;CCD_ 11";或";CCD_ 12";同样,如果它在您正在处理的范围内,但如果用户不编辑单元格的值,则您希望撤消该操作。

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

最新更新