是否有相当于 VBA
甚至 VSTO
中的 Cell_Change
事件的东西,会在用户输入之前触发是否被投入细胞内?我需要在单元格中输入新值之前添加一些检查。
当 WorkSheet_Change
事件触发时,Excel 已经修改了用户输入并将其转换为不同的值。我需要获取用户输入的原始输入。
编辑
更具体地说,我想阻止 Excel 将 3E9
这样的值转换为科学记数法,在我的例子中,这些值恰好是有效(非数字/非科学)输入。
用户可以在整个工作表的任何单元格中输入这些值,因此我无法预先应用文本格式,因为这也会阻止 Excel 对有效数字数据执行其正常功能。
所以我打算:
- 以某种方式在输入进入单元格并进行转换之前获取输入。
- 然后检查它是否符合我正在寻找的确切模式,并即时在该特定单元格上应用文本格式。
最佳答案
您可以捕获正在应用的科学记数法并将其反转为文本字符串
使用正则表达式进行更新以处理解析
- 将有效值重新格式化回初始文本(即
120E3
或99E13
) - 用租用消息替换损坏的值(单元格已格式化为文本,因此下次
12E14
仍保留为文本12E14
工作表事件代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Dim strTmp As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "([1-9]+)(0+)"
Application.EnableEvents = False
For Each rng1 In Target.Cells
If rng1.NumberFormat = "0.00E+00" Then
rng1.NumberFormat = "@"
strTmp = Len(.Replace(rng1.Value, "$2"))
If .Test(rng1.Value) Then
rng1.Value = "'" & .Replace(rng1.Value, "$1E") & strTmp
Else
rng1.Value = "Pls re-enter as text"
End If
End If
Next
End With
Application.EnableEvents = True
End Sub
关于excel - Excel 中的 Cell_Changing 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15898505/