Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Before Delete Row(s) (Range) Event / 7 сообщений из 7, страница 1 из 1
05.02.2018, 16:32
    #39596906
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
Коллеги!

Подскажите где ловить событие ПЕРЕД удалением содержимого целых строк (или выделенного Range).
Когда пользователь жмет Del
Мне бы с возможностью Cancel
...
Рейтинг: 0 / 0
05.02.2018, 16:36
    #39596913
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
Нет такого. Используй комбинацию Worksheet_Change и Undo.
...
Рейтинг: 0 / 0
05.02.2018, 16:46
    #39596928
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
AkinaНет такого. Используй комбинацию Worksheet_Change и Undo.
Пичалько
...
Рейтинг: 0 / 0
05.02.2018, 17:40
    #39596983
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
Разовью тему тогда

Private Sub Worksheet_Change(ByVal Target As Range)

отлавливает все действия
мне нужно ловить исключительно Delete Rows и Insert Rows
Как?
...
Рейтинг: 0 / 0
05.02.2018, 21:47
    #39597097
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
...
Рейтинг: 0 / 0
07.02.2018, 13:17
    #39598143
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
Опробовал несколько подходов.
Не могу сказать, что этот код элегантен и т.п., НО для моих целей вполне подходит

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
' this code copy to WorkSheet area

Dim lOldRowCount As Long


Private Sub Worksheet_Activate()
    ActiveSheet.UsedRange
    lOldRowCount = ActiveSheet.UsedRange.Rows.Count
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lNewRowCount As Long

    ActiveSheet.UsedRange
    lNewRowCount = ActiveSheet.UsedRange.Rows.Count

    If lOldRowCount = lNewRowCount Then
        ElseIf lOldRowCount > lNewRowCount Then
            MsgBox ("Row Deleted")
             ' Call UndoLastAction() ' <<-- uncomment if it needs
            lOldRowCount = lNewRowCount
        ElseIf lOldRowCount < lNewRowCount Then
            MsgBox ("Row Inserted")
            lOldRowCount = lNewRowCount
    End If


End Sub

Sub UndoLastAction()

    With Application
        .EnableEvents = False
        .Undo
        .EnableEvents = True
    End With
...
Рейтинг: 0 / 0
07.02.2018, 13:23
    #39598152
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Before Delete Row(s) (Range) Event
В качестве интересного подхода предложить еще вот такой подход

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Worksheet_Change(ByVal Target As Range)
   
  Dim i As Long, j As Long, k As Long, s As String
  i = Target.Columns.Count
  j = Selection.Columns.Count
  k = Columns.Count
   
  If i = k Or j = k Then
    s = Application.CommandBars(1).FindControl(ID:=128, Recursive:=True).Caption
    If InStr(s, "Insert Cells") Or InStr(s, "Вставить ячейки") Then
      MsgBox "Попытка вставки строк!", vbExclamation, "Отмена вставки строк"
      Application.EnableEvents = False
      Application.Undo
      Application.EnableEvents = True
    Else
      MsgBox "Строки были удалены", vbExclamation, "Не обрабатывать событие удаления"
    End If
    Exit Sub
  End If
    
  ' Ниже - код обработки  остальных случаев
  ' ...
  
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Before Delete Row(s) (Range) Event / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]