Excel VBA 无法跟踪通过复制和粘贴更改的所有行

Excel VBA not able to trace all rows that was changed via copy & Paste

我是 VBA 的新手,我需要跟踪 excel 中所有修改过的行。 excel 文件预计有数百万条记录,其中只有几列或几行预计会被用户修改。为了节省时间,我打算只将修改后的记录更新回 sql 其余删除它。我设法让下面的代码按照预期工作,但前提是用户手动修改。如果用户复制和粘贴多行只有第一条记录被标记为已修改其余不是。

我需要通过手动或在该工作簿中复制粘贴来跟踪任何更改

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rw As Long
    Dim cw As Long
    rw = [Sheet1!b8].CurrentRegion.Rows.Count
    cw = [Sheet1!b8].CurrentRegion.Columns.Count
    lcw = ColumnLetter(cw)
    Dim xrng As Range   
    Set xrng = Range("c1:" &lcw & rw)
    If Not Application.Intersect(xrng, Range(Target.Address)) _
        is Nothing Then
           If Target.Row > 1 Then Cells(Target.Row, 1) = "M"
           End If
    End If  
        
End Sub

Public Function ColumnLetter(ColumnNumber As Long) As String
    ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False), "$")(0)
End Function

你要用 Intersect 做什么并不完全清楚,但这里是一个片段,用于在第一列中用 M 标记所有受影响的行:

Private Sub Worksheet_Change(ByVal Target As Range)
    
     Dim v

     Application.EnableEvents = False
     For Each v In Target
         if v.Row > 1 And v.Column > 1 Then Cells(v.Row, 1) = "M"
     Next
     Application.EnableEvents = True

End Sub

备注:

For Each 循环管理多个单元格选择。

需要

Application.EnableEvents = False 来防止潜艇在更改 Cells(..., 1)

时触发

此代码并不完美,因为它覆盖 Cells(..., 1) 受影响范围包含的列的次数。但是如果它不是太慢的话,你可以让它保持这么简单。试一试。