Принудительное перемещение ячеек вверх (Microsoft Excel)
У Криса на работе есть большой рабочий лист, содержащий несколько макросов. Один из них удаляет блок ячеек и перемещает остальные вверх. Однако иногда пользователи не используют макрос и вместо этого вручную удаляют блок. Это катастрофа, если при удалении ячейки перемещаются влево, а не вверх.
Крис задается вопросом, есть ли способ использовать макросы для принудительного перемещения ячеек вверх и предотвращения ручного перемещения ячеек влево.
Как и во многих других случаях в Excel, есть несколько способов решения этой проблемы. Я не могу вдаваться в подробности здесь, так как любой выбранный подход будет зависеть от характера информации на листе и от того, что вы хотите разрешить или запретить. Следующие разделы, однако, могут дать ключ, который поможет вам выбрать наиболее подходящий для вас подход.
Защита рабочего листа
Простой (и эффективный) подход — разработать свой рабочий лист таким образом, чтобы его можно было защитить. Конечно, вы должны убедиться, что любые ячейки, в которые пользователь должен вводить информацию, не защищены, но в противном случае ваш макрос может гарантировать, что, когда рабочий лист активирован, он будет защищен.
Это исключает возможность ручного удаления пользователем любых ячеек с рабочего листа.
Это означает, что если диапазон ячеек необходимо удалить, пользователь будет вынужден (защитой) выбрать ваш макрос для удаления. Затем макрос может снять защиту с листа, удалить диапазон ячеек и повторно защитить его.
Перехват удаления
Другой подход, основанный на макросах, — это работа с событием BeforeDelete для контроля того, что на самом деле происходит. Ниже приводится простой обработчик событий, который может быть основой того, что вы действительно используете:
Private Sub Worksheet_BeforeDelete() Dim delRng As Range Dim selRng As Range On Error Resume Next Set delRng = Range("C2:D5") ' Change the range to the block ' of cells to be deleted (manually ' or by macro) Set selRng = Application.Selection ' Cells selected manually ' by the user If MyRng.Address = delRng.Address Then Selection.Delete shift:=xlUp End If End Sub
Обработчик событий просто сравнивает диапазон, который вы хотите удалить, только вверх с диапазоном, который пользователь выбрал для удаления. Если диапазоны совпадают, то обработчик удаляет диапазон и перемещает его вверх. Очевидно, вам потребуется изменить диапазон, присвоенный переменной delRng, чтобы он соответствовал диапазону, который вы хотите отслеживать.
Переназначение клавиши удаления
Говоря об удалении, вы также можете переназначить клавишу Delete, чтобы она делала все, что вы хотите. Все, что вам нужно сделать, это включить макрос, подобный следующему, в модуль кода ThisWorkbook:
Private Sub Workbook_Open() Application.OnKey "{DELETE}", "MyMacro()" End Sub
Это означает, что при открытии книги клавиша «Удалить» переназначается, так что при ее нажатии автоматически запускается MyMacro (измените его на любой макрос).
Обратите внимание, что этот подход влияет только на нажатие клавиши Delete; это не влияет на удаления, выполненные каким-либо другим способом. Для них ваши макросы все равно должны предвидеть и обрабатывать логику.
Полный подход
Это подводит нас к целостному подходу. Этот подход просто означает создание списка всех различных способов, которыми пользователь может инициировать удаление, а затем перехват этих способов. Список (и перехваты) обязательно должен включать некоторые из уже обсужденных подходов, таких как обработка клавиши Delete. Вам также нужно будет выяснить, как отключить или изменить то, что происходит, когда пользователь щелкает правой кнопкой мыши или когда пользователь выбирает параметр удаления на ленте.
(Возможно, вы даже захотите удалить параметры, связанные с удалением, из пользовательского интерфейса.)
Этот подход может быть довольно длинным, так как исчерпывающий список методов удаления может быть трудоемким для составления и обработки.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13632) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.