复制粘贴不会触发worksheet_change

这是我需要做的:当我写了一些东西到Worksheet_Change中的一个单元格时,我的Worksheet_Change代码应该检查单元格是否包含某些字符,然后replace这些字符。 这部分代码工作正常。

但是有一个有点奇怪的行为。 以下是目前的代码:

  Private Sub Worksheet_Change(ByVal Target As Range) Target.Value = Replace(Target.Value, "ß", "ß") MsgBox "This is the value: " & Target.Value End Sub 

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

但是,如果我只是用箭头键移动到单元格上,然后粘贴到单元格中的任何内容上,则什么都不会发生。 我怀疑Worksheet_Change甚至没有触发,否则它至less会显示我的MsgBox

(我不知道这是否与此有关,但我在Mac上使用Excel 2010)

您可以在触发器表上使用Worksheet_Calculate。

  • 创build一个只包含您想要观看的范围链接的新工作表(即= Sheet1!A1:B3)
  • 将名为Worksheet_Calculate的macros添加到触发器表单中
  • 现在,每当链接范围内的任何date发生变化时,触发器表的重新计算就会被触发,从而引发您的macros

当用户在相应的单元格中input一个公式,并且其中一个前人发生变化时,这也起作用。

通过手动计算,触发板和macros的重新计算仅在用户按下F9时才会发生。

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

  Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo err_rout Application.EnableEvents = False If Target.Count > 1 Then Exit Sub Target.Value = Replace(Target.Value, "ß", "ß") MsgBox "This is the value: " & Target.Value err_rout: Application.EnableEvents = True End Sub 

在这里输入图像说明

 If Target.Column = 3 Then Dim startRow As Integer Dim endRow As Integer startRow = Target.Row endRow = Target.Row + Target.Count - 1 For i = startRow To endRow ' blah blah blah 

也许它有帮助