Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA在删除行之前复制行_Excel_Vba - Fatal编程技术网

Excel VBA在删除行之前复制行

Excel VBA在删除行之前复制行,excel,vba,Excel,Vba,我需要为Excel工作表中的更改创建类似日志的内容 例如,我有以下列表: 1.a b c 2.def 3.hij 当我删除第二行时,我需要将其数据复制到其他工作表中,因此我的第一个列表如下所示: 1.a b c 3.hij 第二个: 2.def 现在我使用以下代码: Private usedRowsCount As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) usedRowsCount = Target


我需要为Excel工作表中的更改创建类似日志的内容

例如,我有以下列表:
1.a b c
2.def
3.hij

当我删除第二行时,我需要将其数据复制到其他工作表中,因此我的第一个列表如下所示:
1.a b c
3.hij

第二个:
2.def

现在我使用以下代码:

Private usedRowsCount As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  usedRowsCount = Target.Worksheet.UsedRange.Rows.Count 
End Sub

Sub Worksheet_Change(ByVal Target As Range)
  If usedRowsCount < Target.Worksheet.UsedRange.Rows.Count Then
    Debug.Print "Row Added: ", Target.Address
  ElseIf usedRowsCount > Target.Worksheet.UsedRange.Rows.Count Then
   Worksheets("Sheet1").Range("A2:L2").Value = Target.Value ' here it inserts values of shifted up row. I need to get values of deleted row(s)
    Debug.Print "Row deleted: ", Target.Address
  End If
End Sub
Private usedRowsCount尽可能长
专用子工作表\u选择更改(ByVal目标作为范围)
usedRowsCount=Target.Worksheet.UsedRange.Rows.Count
端接头
子工作表_变更(ByVal目标作为范围)
如果usedRowsCountTarget.Worksheet.UsedRange.Rows.Count然后
工作表(“Sheet1”).Range(“A2:L2”).Value=Target.Value”在此插入上移行的值。我需要获取已删除行的值
调试.打印“删除行:”,目标.地址
如果结束
端接头
但它复制的不是已删除的行数据,而是已删除行下的行数据。
示例列表:
1.a b c
3.hij

表1中复制的行数据:
3.HI j----不是预期的“2.d e f”

有什么建议吗


谢谢大家!

也许这对你有用,但不能保证它能涵盖所有情况

您可能需要调整以适应您的精确设置

Private usedRowsCount As Long, v As Variant

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  usedRowsCount = Target.Worksheet.UsedRange.Rows.Count
  v = Selection.Resize(, 3).Value 'columns A-C of selected row
End Sub

Sub Worksheet_Change(ByVal Target As Range)
  If usedRowsCount < Target.Worksheet.UsedRange.Rows.Count Then
    Debug.Print "Row Added: ", Target.Address
  ElseIf usedRowsCount > Target.Worksheet.UsedRange.Rows.Count Then
   Worksheets("Sheet2").Range("A2").Resize(, 3).Value = v
    Debug.Print "Row deleted: ", Target.Address
  End If
End Sub
Private usedRowsCount作为长,v作为变量
专用子工作表\u选择更改(ByVal目标作为范围)
usedRowsCount=Target.Worksheet.UsedRange.Rows.Count
v=选择。调整选定行A-C列的大小(,3)。值
端接头
子工作表_变更(ByVal目标作为范围)
如果usedRowsCountTarget.Worksheet.UsedRange.Rows.Count然后
工作表(“Sheet2”)。范围(“A2”)。调整大小(,3)。值=v
调试.打印“删除行:”,目标.地址
如果结束
端接头

如果单元格不再存在,则无法复制单元格。您需要先捕获已删除单元格的内容,然后再将其删除。我甚至不确定这是否可能。