查找通过粘贴或拖动更改的所有单元格

问题描述

设置:

从包含 3 列的工作表开始。 “ID”、“MyNote”、“MyDate”标题。此工作表可能有数千行数据。

我需要“标记用户对行上的任何内容进行更改的任何行。在其他代码中,标记的行将依次用于更新我的 sql 服务器上的表。

通常情况下,用户在会话中只会更改/更新几行。所以我不想处理工作表中的每一行,尤其是那些没有变化的行。

我现在的工作:

我通过在用户进行更改时将“x”写入附加的“标志”列成功地做到了这一点。然后我可以处理任何标有 "x" 的行。我使用:

Private Sub Worksheet_Change(ByVal Target As Range)
...
' Flag any lines with a change
    If Not Intersect(Target,Me.Range(TestForChangeColRange)) Is nothing Then
        Application.EnableEvents = False
          ' Set the "Pending Write" Flag
          Target.Worksheet.Range(PendingWriteCol & Target.Row).Value = "x"
        Application.EnableEvents = True

...  

问题:

这对于一次更新单个单元格非常有用。当用户 a) 使用拖动和复制(拖动单元格的右下角以在拖动的位置复制它)或 b) 使用其他工作簿中的粘贴时,就会出现问题,在任何一种情况下,都会更改多个单元格一次。

在这些情况下,Worksheet_Change 只会看到第一个单元格,而不会看到任何通过拖动或粘贴进行编辑的额外单元格。

我试图找到其他类似的解决方案来拦截复制/粘贴等,但无论如何我都看不到如果复制了,哪些单元格受到了影响。

需要:

我只需要知道哪些行号受到拖动或复制/粘贴的影响。如果我能准确地将这些行标记为已更新,我就可以开展业务了。

跟进

使用 Tim 的解决方案。无法将某些东西重新融入其中。 此外,我需要能够检查是否编辑了特定列,如果是,则清除不同的列。例如,如果编辑了第 2 列,则清除第 3 列的内容

我尝试在 For 循环中添加测试,但是我的 rw.Col 的 colno 出现了。

If Not rng Is nothing Then
    'expand the range so we can flag by row,and not cell-by-cell
    Set rng = Application.Intersect(rng.EntireRow,rngTbl)
    For Each rw In rng.Rows 'loop over affected rows
        Me.Cells(rw.Row,PendingWriteCol).Value = "x"

        If rw.Column = RequestTypeCol Then
          Me.Cells(rw.Row,LastColToClear).ClearContents
        End If

    Next rw
End If

你能告诉我我做错了什么吗?

解决方法

例如(继 Scott 的评论之后):

Private Sub Worksheet_Change(ByVal Target As Range)
    Const PendingWriteCol As Long = 4
    Const TestForChangeColRange = "A:C"
    
    Dim rw As Range,rng As Range,rngTbl As Range
    
    Set rngTbl = Me.Range(TestForChangeColRange)
    Set rng = Application.Intersect(Target,rngTbl) 'any monitored cells affected?
    If Not rng Is Nothing Then
        'expand the range so we can flag by row,and not cell-by-cell
        Set rng = Application.Intersect(rng.EntireRow,rngTbl)
        For Each rw In rng.Rows 'loop over affected rows
            Me.Cells(rw.Row,PendingWriteCol).Value = "x"
        Next rw
    End If
End Sub

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...