6

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

4

3 回答 3

2

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

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

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

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

于 2013-09-21T16:56:15.760 回答
1

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

在此处输入图像描述

于 2013-04-17T00:56:33.637 回答
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

也许它有帮助

于 2013-10-20T14:24:58.323 回答