复制粘贴不会触发worksheet_change

fla*_*ngo 6 excel vba excel-vba excel-vba-mac

这是我需要做的事情:当我在工作表中的单元格中写入内容时,我的Worksheet_Change代码应检查单元格是否包含某些字符,然后替换这些字符.代码的那部分工作正常.

但是有一种奇怪的行为.这是迄今为止的代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Target.Value = Replace(Target.Value, "ß", "ß")

        MsgBox "This is the value: " & Target.Value
    End Sub
Run Code Online (Sandbox Code Playgroud)

发生了什么事情,当我在剪贴板中有需要更改的字符时(使用Ctrl+ C).当我双击单元格时,使用Ctrl+ 将字符粘贴到单元格中V,然后按Enter键,代码工作正常,字符也会更改.(注意:如果没有双击,则无法看到光标.)

但是,如果我只是用箭头键移动到单元格并粘贴到单元格中的任何其他内容,则没有任何反应.我怀疑Worksheet_Change它甚至没有触发,否则它至少会显示我的MsgBox.

(我不知道它是否与此相关,但我在Mac中使用Excel 2010)

San*_*osh 1

使用 Worksheet_Change 事件时始终使用 EnableEvents 属性。欲了解更多详情 链接

\n\n
  Private Sub Worksheet_Change(ByVal Target As Range)\n\n On Error GoTo err_rout\n\n\n    Application.EnableEvents = False\n\n    If Target.Count > 1 Then Exit Sub\n\n    Target.Value = Replace(Target.Value, "\xc3\x83\xc5\xb8", "\xc3\x9f")\n\n    MsgBox "This is the value: " & Target.Value\n\nerr_rout:\n    Application.EnableEvents = True\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n

  • 您可以添加断点 >> Goto Private Sub Worksheet_Change(ByVal Target As Range) 代码行 >> 按 F9 验证事件是否被触发。 (2认同)