当我从Sheet1移动到Sheet2时,我可以使用什么样的VBA来使Sheet2的activecell与我切换时在Sheet1上激活的行相同?
例如:我在Sheet1上激活了Cell B7。当我切换到Sheet2时,activecell移动到第7行(并且不会更改上一次我在Sheet2上的列)。
答案 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
目的很明确:在要停用的工作表上进行选择,然后在要激活的工作表上设置选择。
只有两个问题:
Excel只有一个 Selection
,这是活动工作表上的当前选择。
在工作表被取消激活并激活新工作表后,发生停用事件。
因此,无法在已停用的工作表上获取用户的最后位置,因此我们无法在正在激活的工作表上进行设置。
任何想法?
答案 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编辑器中附加到工作簿。