Антецедент ActiveCell.Address - PullRequest
0 голосов
/ 16 июня 2019

Я новичок в vba, и у меня довольно простая проблема.Я хочу получить адрес последней активной ячейки, которая там была.Например, если я был на A5 и переехал на B6, есть ли команда для получения адреса A5?

Любой совет или предложение высоко ценится!

Я пробовал ActiveCell.Previous, но в нем указан адрес ячейки слева от активной ячейки.Смещения для меня бесполезны, поскольку адрес A5 неизвестен, пока пользователь не изменит что-либо внутри сетки ячеек.

1 Ответ

1 голос
/ 16 июня 2019

Самый очевидный способ - использовать события Excel. Вы можете взглянуть на событие SelectionChange, которое позволит вам сохранить предыдущий выбор на уровне модуля и затем извлечь это значение при последующих срабатываниях события.

В приведенном ниже примере я использовал выделенный код объекта Workbook, поскольку он позволяет регистрировать выборки на любом листе, но вы можете сделать то же самое только на одном листе.

Если вас интересуют только определенные ячейки, посмотрите на функцию Intersect, чтобы уточнить процедуру.

Option Explicit

Private pPreviousWorksheet As Worksheet
Private pPreviousSelection As Range

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    'Check SH object is a worksheet.
    If TypeOf Sh Is Worksheet Then

        'Check we have instances of previous objects.
        If Not pPreviousWorksheet Is Nothing And Not pPreviousSelection Is Nothing Then

            'Process code here...
            MsgBox "Previous was " & _
                pPreviousWorksheet.Name & "!" & _
                pPreviousSelection.Address(False, False)

        End If

        'Re-set the previous objects.
        Set pPreviousWorksheet = Sh
        Set pPreviousSelection = Target

    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...