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