复制粘贴不会触发worksheet_change

时间:2013-04-16 23:58:59

标签: excel excel-vba excel-vba-mac vba

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

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

    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甚至没有被触发,否则它至少会显示我的MsgBox

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

3 个答案:

答案 0 :(得分:2)

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

  • 创建一个新工作表,其中只包含指向所需范围的链接 观看(即= Sheet1!A1:B3)
  • 将一个名为Worksheet_Calculate的宏添加到触发器表
  • 现在,只要链接范围内的任何日期发生变化,触发表的重新计算就会被触发,而这会重新启动您的宏

当用户在相应的单元格中输入公式并且其中一个前驱更改时,这也有效。

通过手动计算,只有在用户按下F9时才会重新计算触发页和宏。

答案 1 :(得分:1)

使用Worksheet_Change事件时始终使用EnableEvents属性。有关详细信息link

  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

enter image description here

答案 2 :(得分:0)

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

也许有帮助

相关问题