Страницы: 1
RSS
Запрос подтверждения на удаление строк / блокировка удаления строк
 
Доброго дня, подскажите, возможно ли например через макрос настроить запрос подтверждения при попытке удалить строку (или полностью заблокировать удаление строк на листе) ?
Есть лист с данными, данные периодически могут меняться, на эти данные ссылаются формулы с других листов, иногда (по невнимательности и забывчивости) вместо очистить содержимое пользователь удаляет строки целиком (так ведь быстрее и проще), а формулы слетают, вообще перестают работать или уменьшается диапазон охвата данных для обработки (что еще хуже, формула ведь работает, а факт того что она обрабатывает не все данные может долгое время быть не выявленным).
Хотелось бы запретить удаление строк на конкретных листах книги (в крайнем случае во всей книге), при этом, ограничение должно быть только на удаление строк и ни на что больше - данные можно менять как угодно, столбцы можно удалять ....
Как вариант - при попытке удалить строку - появляется всплывающее окно  с запросом подтверждения на удаление - пользователь видит, что это может повлиять на формулы и отказывается от удаления строк (вроде как напоминание, что так делать не стоит)
 
Вот ТУТ решали
Согласие есть продукт при полном непротивлении сторон
 
Sanja, решение только для вставки / удаления столбцов, меня интересуют строки, пробовал просто поменять Columns на Rows, но он все также работает только на столбцы
Код
Option Explicit

Public WithEvents q1 As CommandBarButton  ' удалить столбец
Public WithEvents q2 As CommandBarButton  ' вставить столбец

Public WithEvents cb As CommandBars

Dim n As Long

Private Sub cb_OnUpdate()
  If q2 Is Nothing Then
    Init
    n = n + 1
    If Not q2 Is Nothing Then
      Set cb = Nothing
      Debug.Print n
    End If
  End If
End Sub

Private Sub q1_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.Name = Sheet2.Name Then
        If Selection.Rows.Count = ActiveSheet.Rows.Count Then
          If MsgBox("Вы хотите удалить " & IIf(Selection.Columns.Count = 1, "выделенный столбец", _
                    "выделенные столбцы"), vbYesNo + vbQuestion) <> vbYes Then
              CancelDefault = True
          End If
        End If
    End If
End Sub

Private Sub q2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    If ActiveWorkbook.Name = ThisWorkbook.Name And ActiveSheet.Name = Sheet2.Name Then
        If Selection.Rows.Count = ActiveSheet.Rows.Count Then
          If MsgBox("Вы хотите вставить " & IIf(Selection.Columns.Count = 1, "столбец", "столбцы"), vbYesNo + vbQuestion) <> vbYes Then
              CancelDefault = True
          End If
        End If
    End If
End Sub

Private Sub Init()
    With Application.CommandBars
        If q1 Is Nothing Then Set q1 = .FindControl(ID:=294)
        If q2 Is Nothing Then Set q2 = .FindControl(ID:=3183)
    End With
End Sub

Private Sub Workbook_Open()
    Set cb = Application.CommandBars
    Init
End Sub
 
Нужно искать ID соответствующих пунктов Меню
Цитата
If q1 Is Nothing Then Set q1 = .FindControl(ID:=294)
If q2 Is Nothing Then Set q2 = .FindControl(ID:=3183)
Согласие есть продукт при полном непротивлении сторон
 
mitya528 Не помню какой ID к чему. но точно к строкам и столбцам
FindControl(ID:=294
FindControl(ID:=3183
FindControl(ID:=293
FindControl(ID:=296
 
Файл с макросом для получения ID
Согласие есть продукт при полном непротивлении сторон
 
Переписал Ваш макрос для строк. См.файл
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Спасибо!
 
Цитата
написал:
293
к строке
Спасибо! :)  
 
Цитата
Sanja написал:
Файл с макросом для получения ID
Здравствуйте, Виталий!
Макрос в Вашем сообщении не всё показывает (в части вложенных меню).
Можно попробовать макрос во вложении.
Владимир
 
Спасибо, пригодится!
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх