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)
受影响范围包含的列的次数。但是如果它不是太慢的话,你可以让它保持这么简单。试一试。
我是 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)
受影响范围包含的列的次数。但是如果它不是太慢的话,你可以让它保持这么简单。试一试。