2013-08-07 3 views
1

Есть ли в рабочем листе мероприятие «BeforeRowDelete»? Доступно только событие «Изменение рабочего листа», но объект «Цель» объекта диапазона указывает на следующую строку строки, которую я удалил.Есть ли в рабочем листе событие «BeforeRowDelete»?

Есть ли идея, чтобы строка удалялась до ее фактического завершения?

ответ

0

Вы можете использовать что-то вроде этого, с которым я только что сбил. Введите RowID в последней строке в столбце A, и если вы удалите строки/ячейки, которые перемещают эту ячейку, она сообщит о последнем выбранном диапазоне и строке перед диапазоном.

Option Explicit 

    Dim deletedRng() As Variant 

    Private Sub Worksheet_Change(ByVal Target As Range) 
    '***Enter string "RowID" in cell [A1048547] 

    Dim rowID As Long 
    Dim rowFind As Range 

     With Target.Parent 

      Set rowFind = .Range("A:A").Find(What:="RowID", LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 

      Application.EnableEvents = False 

      If rowFind Is Nothing Then 
       .Range("A" & .Rows.Count).Value = "RowID" 
      Else 
       If rowFind.Row < .Rows.Count Then 
        MsgBox "Cell (1,1) of range deleted = " & deletedRng(Target.Cells(1, 1).Row, Target.Cells(1, 1).Column) 
        rowFind.ClearContents 
        .Range("A" & .Rows.Count).Value = "RowID" 
       End If 
      End If 
      Application.EnableEvents = True 

     End With 
    End Sub 

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    If Target.Address = "$A$1" Then 
     ReDim deletedRng(1, 1) 
     deletedRng(1, 1) = Target.Value 
    Else 
     deletedRng = Target.Parent.Range("A1:" & Target.Address).Value 
    End If 
    End Sub 
+0

спасибо, я пробую ваш код, и это говорит мне, что номер строки был удален. но возможно ли получить не только номер строки, но и (например) первую ячейку («Target.cells (1,1) .value') строки удалено? – johnn

+0

Да - 'Target.Cells (1, 1) .Address' или для строки' Target.Cells (1, 1) .EntireROw.Address' – osknows

+0

Благодарим за внимание. Я хочу сказать, что я хочу «Значение» первой ячейки строки, которая была удалена, а не «Адрес». – johnn

Смежные вопросы