【问题标题】:Copy-paste doesn't trigger worksheet_change复制粘贴不会触发 worksheet_change
【发布时间】:2020-07-03 15:14:46
【问题描述】:

这是我需要做的:当我在工作表的单元格中写入内容时,我的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)

【问题讨论】:

  • 如果您从 Excel within 复制并粘贴一个值,_Change 事件会触发吗? This thread 表明 Excel for Mac 中存在错误,如果从另一个应用程序粘贴,_Change 事件不会触发。
  • 是的@DavidZemens。你是对的。这是一个 Excel2011 错误。虽然我无法在 Mac 上测试 Excel2010。
  • 不,_Change 事件也不会触发。所以这似乎是一个错误?

标签: excel vba macos


【解决方案1】:

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

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

这也适用于用户在相应单元格中输入公式并且前一个公式之一发生更改时。

使用手动计算,触发表和宏的重新计算仅在用户按 F9 时发生。

【讨论】:

  • 天才解决方案
【解决方案2】:

在处理 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

【讨论】:

  • 非常感谢,但不幸的是,这也不起作用。仍然是相同的行为。
  • @flamingo 希望您已将代码粘贴到工作表代码部分。
  • 我假设您的意思是带有下拉框的窗口,我在左侧选择工作表,然后在右侧选择更改功能? Visual Basic 编辑器? (抱歉,我的 excel 是德语的 :) 是的,我将代码放入该窗口下方的代码部分,并带有两个下拉菜单。
  • @flamingo 我已经添加了截图。
  • 您可以添加断点>>转到代码中的 Private Sub Worksheet_Change(ByVal Target As Range) 行>>按 F9 验证是否触发了事件。
【解决方案3】:
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

也许有帮助

【讨论】:

  • @DigitalTrauma,格式化代码时请小心。你把<br>标签留在里面了。
  • @gunr2171 - 哎呀抱歉。我想从手机编辑不是最好的主意。 :-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多