简体   繁体   中英

Excel VBA: Move ActiveCell to Row of Newly Inactive Sheet

When I move from Sheet1 to Sheet2, what VBA can I use to have the activecell of Sheet2 be the same row as was active on Sheet1 when I switched?

For example: I have Cell B7 active on Sheet1. When I switch to Sheet2, the activecell moves to the 7th row, (and does not change columns from what it was the last time I was on Sheet2).

Although the question received a downvote, it is absolutely not trivial. I have only been able to research a partial answer.

Attach the following code to the Workbook (double click on ThisWorkbook in VBA Project Explorer):

Private activeRow As Integer, activeCol As Integer

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    activeRow = Selection.Row
    activeCol = Selection.Column
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    ActiveSheet.Cells(activeRow, activeCol).Select
End Sub

The intention is clear: get the selection on the sheet being deactivated and then set the selection on the sheet being acivated.

There only are two problems:

  1. Excel has only one Selection and that is the current selection on the active sheet.

  2. The deactivate event occurs after the sheet is deactived and the new sheet activated.

As a result, it is not possible to get the last position of the user on the sheet that got deactivated and so we can't set it on the sheet being activated.

Anyone any ideas?

After really debugging hard on event sequences, I said "Eureka!". The following does what you ask:

Private activeRow As Integer, activeCol As Integer
Private sema4 As Integer

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If (sema4 > 0) Then Exit Sub
    sema4 = 1
    Sheets(Sh.Name).Activate
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If (sema4 = 1) Then
        activeRow = Selection.row
        activeCol = Selection.Column
        sema4 = 2
        Exit Sub
    ElseIf (sema4 = 2) Then
        sema4 = 3
        Sheets(Sh.Name).Activate
        Exit Sub
    ElseIf (sema4 = 3) Then
        ActiveSheet.Cells(activeRow, activeCol).Select
        sema4 = 0
    End If
End Sub

Again, attach in VB editor to the Workbook.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM