excel - Excel 中的 Cell_Changing 事件

标签 excel events vsto vba

是否有相当于 VBA 甚至 VSTO 中的 Cell_Change 事件的东西,会在用户输入之前触发是否被投入细胞内?我需要在单元格中输入新值之前添加一些检查。

WorkSheet_Change 事件触发时,Excel 已经修改了用户输入并将其转换为不同的值。我需要获取用户输入的原始输入。

编辑

更具体地说,我想阻止 Excel 将 3E9 这样的值转换为科学记数法,在我的例子中,这些值恰好是有效(非数字/非科学)输入。

用户可以在整个工作表的任何单元格中输入这些值,因此我无法预先应用文本格式,因为这也会阻止 Excel 对有效数字数据执行其正常功能。

所以我打算:

  • 以某种方式在输入进入单元格并进行转换之前获取输入。
  • 然后检查它是否符合我正在寻找的确切模式,并即时在该特定单元格上应用文本格式。

最佳答案

您可以捕获正在应用的科学记数法并将其反转为文本字符串

使用正则表达式进行更新以处理解析

  • 将有效值重新格式化回初始文本(即 120E399E13)
  • 用租用消息替换损坏的值(单元格已格式化为文本,因此下次 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/

相关文章:

r - 使用 R(或者 Excel)组合数据——循环匹配刺激

Google 表格中的 Excel 样式组合框

Excel VBA 将列值替换为另一个值?

vba - 如何从代码中删除 Excel VBA 的 $ 符号

javascript - jquery 多个事件处理程序

c# - 使用C#识别ms word文档中的标题

c# - Excel 插件 COM 插件 VS VSTO 插件

android - 如何将触摸事件发送到android中的其他应用程序

events - 在 GWT 2.0 中切换 StackLayoutPanel 堆栈时触发事件

c# - 消息日期属性的架构名称