Excel VBA скопировать строку перед ее удалением - PullRequest
0 голосов
/ 19 марта 2020


Мне нужно создать что-то вроде журнала для изменений в Excel Worksheet.

Например, у меня есть этот список:
1. ab c
2. def
3. hij

Когда я удаляю вторую строку, мне нужно скопировать ее данные на другой лист, поэтому мой первый список будет выглядеть так:
1. ab 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

Но он копирует не удаленные данные строки, а данные строки ниже удаленного.
Пример списка:
1. ab c
3. hij

Скопированные данные строки в Лист1:
3. hij ---- не "2. def", как ожидалось.

Есть предложения?

Спасибо!

1 Ответ

1 голос
/ 19 марта 2020

Может быть, это работает для вас, не могу гарантировать, что оно охватит все случаи.

Возможно, вам придется настроить для вашей точной настройки.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...