Excel VBA:将ActiveCell移动到新的非活动工作表行

时间:2016-04-21 16:15:59

标签: vba excel-vba excel

当我从Sheet1移动到Sheet2时,我可以使用什么样的VBA来使Sheet2的activecell与我切换时在Sheet1上激活的行相同?

例如:我在Sheet1上激活了Cell B7。当我切换到Sheet2时,activecell移动到第7行(并且不会更改上一次我在Sheet2上的列)。

2 个答案:

答案 0 :(得分:0)

虽然这个问题得到了一个问题,但这绝对不是微不足道的。我只能研究部分答案。

将以下代码附加到工作簿(双击VBA Project Explorer中的ThisWorkbook):

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

目的很明确:在要停用的工作表上进行选择,然后在要激活的工作表上设置选择。

只有两个问题:

  1. Excel只有一个 Selection,这是活动工作表上的当前选择。

  2. 在工作表被取消激活并激活新工作表后,发生停用事件。

  3. 因此,无法在已停用的工作表上获取用户的最后位置,因此我们无法在正在激活的工作表上进行设置。

    任何想法?

答案 1 :(得分:0)

在对事件序列进行了真正的调试之后,我说" Eureka!"。以下是您的要求:

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

再次,在VB编辑器中附加到工作簿。