Как отключить активность ячейки?

Как можно убрать выделение ячейки после выполнения макроса, так как оно остается в виде рамки в том месте, где была удаленная строка, и это создает неудобства? <br/> <br/> Также, если выделено несколько ячеек с помощью Ctrl + мышь в разных местах (не последовательно), как сделать так, чтобы после выполнения макроса активной стала ячейка, следующая за самой нижней из выделенных? <br/> <br/> Sub Udalit_vse_stroki_s_videlennimi_yachejkami() <br/> Selection.EntireRow.Delete ' Удалит все строки где выделено что-либо <br/> ActiveCell.Offset(1, 0).Activate <br/> End Sub
  • 25 сентября 2024 г. 14:53
Ответы на вопрос 1
Чтобы убрать выделение ячеек и активировать ячейку, следующую за самой нижней из выделенных, можно воспользоваться следующим кодом. Мы можем использовать цикл для определения нижней границы выделенных ячеек, а затем активировать следующую ячейку, после удаляемых строк. Также мы будем использовать `Application.CutCopyMode = False`, чтобы убрать рамку выделения.

Ниже приведен измененный код вашего макроса, который выполняет эти задачи:

```vba
Sub Udalit_vse_stroki_s_videlennimi_yachejkami()
    Dim rng As Range
    Dim bottomCell As Range
    
    ' Включаем обработку ошибок для исключений в случае, если ничего не выделено
    On Error GoTo ErrHandler

    ' Получаем выделенные ячейки
    Set rng = Selection

    ' Находим нижнюю ячейку среди выделенных
    Set bottomCell = rng.Cells(rng.Cells.Count)
    
    ' Удаляем строки с выделенными ячейками
    rng.EntireRow.Delete

    ' Активируем следующую ячейку после самой нижней из выделенных
    If Not bottomCell Is Nothing Then
        ActiveSheet.Cells(bottomCell.Row, bottomCell.Column).Offset(1, 0).Activate
    End If
    
    ' Убираем выделение
    Application.CutCopyMode = False

    Exit Sub

ErrHandler:
    MsgBox "Нет выделенных ячеек или произошла ошибка."
End Sub
```

### Объяснение кода:
1. **Обработка ошибок:** Используется блок `On Error GoTo` для обработки ошибок, которые могут возникнуть, если ничего не выделено.
   
2. **Определение нижней ячейки:** Мы сохраняем новую переменную `bottomCell`, которая представляет собой последнюю ячейку в выделенном диапазоне.
   
3. **Удаление строк:** `rng.EntireRow.Delete` удаляет все строки, содержащие выделенные ячейки.
   
4. **Активация следующей ячейки:** После удаления строк мы активируем ячейку, находящуюся ниже той, что была самой нижней из первоначально выделенных.
   
5. **Убираем выделение:** `Application.CutCopyMode = False` используется для устранения рамки выделения.

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