Джон задается вопросом, есть ли в VBA способ определить последнюю ячейку, которая была изменена пользователем. Он не хочет знать, была ли ячейка изменена макросом, а конкретно пользователем.

Ответ — да, вроде того. Вы можете использовать событие Worksheet_Change для написания обработчика, который будет записывать, когда какая-либо конкретная ячейка на листе изменяется. Макрос, который делает это, может быть довольно простым, например, этот:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.StatusBar = Target.Address End Sub

Макрос просто помещает адрес последнего изменения в строку состояния. Вы можете изменить макрос так, чтобы он сохранял адрес в глобальной переменной (объявленной вне обработчика событий) следующим образом:

Dim sAddr As String

Private Sub Worksheet_Change(ByVal Target As Range)

sAddr = Target.Address(False, False)

End Sub

Затем вы можете использовать обычный макрос для получения адреса, хранящегося в переменной sAddr, и делать с ним все, что хотите.

Что касается обеспечения того, чтобы обработчик событий не записывал никаких изменений, сделанных макросами, единственный способ сделать это — отключить обработку событий перед выполнением любой макрос-команды, которая изменит рабочий лист. Например, следующее изменение свойства EnableEvents можно использовать до и после команды, изменяющей содержимое ячейки A1:

Application.EnableEvents = False Range("A1") = "Hello"

Application.EnableEvents = True

Если обработка событий отключена, обработчик событий Worksheet_Change не будет запущен, и адрес «последнего изменения» не будет обновлен. В результате вы отслеживаете только изменения, сделанные пользователями, а не изменения, сделанные макросами.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (11475) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Identifying_the_Last_Cell_Changed_in_a_Worksheet [Определение последней измененной ячейки в листе].