Excel VBA:将ActiveCell移动到新非活动工作表的行
当我从Sheet1移动到Sheet2时,我可以使用什么样的VBA使Sheet2的activecell与我切换时Sheet1上的活动单元格位于同一行Excel VBA:将ActiveCell移动到新非活动工作表的行,vba,excel,Vba,Excel,当我从Sheet1移动到Sheet2时,我可以使用什么样的VBA使Sheet2的activecell与我切换时Sheet1上的活动单元格位于同一行 例如:我在Sheet1上激活了单元格B7。当我切换到Sheet2时,activecell会移动到第7行(并且不会改变我上次在Sheet2上的列)。尽管这个问题得到了否决票,但它绝对不是无关紧要的。我只能研究部分答案 将以下代码附加到工作簿(在VBA项目资源管理器中双击此工作簿): 目的很明确:在要停用的工作表上获取选择,然后在要停用的工作表上设置选择
例如:我在Sheet1上激活了单元格B7。当我切换到Sheet2时,activecell会移动到第7行(并且不会改变我上次在Sheet2上的列)。尽管这个问题得到了否决票,但它绝对不是无关紧要的。我只能研究部分答案 将以下代码附加到工作簿(在VBA项目资源管理器中双击此工作簿): 目的很明确:在要停用的工作表上获取选择,然后在要停用的工作表上设置选择 只有两个问题:
选择
,即活动工作表上的当前选择有人有什么想法吗?在对事件序列进行了认真的调试之后,我说了声“尤里卡!”。以下内容符合您的要求:
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编辑器中附加到工作簿。谷歌会在3分钟后告诉你。我已经在谷歌上搜索了很多。我找不到答案。
我在谷歌上搜索了很多。我找不到答案
,那一定意味着无法完成。抱歉:/@findwindow但这一个太棒了;)@mrbungle我应该把它作为一个答案来发布~^我从来没有这样做过,但是你能设置一个点击事件吗?这样每次选择一个新单元格时,列和行都以长的形式存储,然后当工作表更改事件发生时,你可以激活最后一个已知的。单元格(var,var)完美!非常感谢。附言:叫一个“旗子”是很搞笑的。我以前从未见过这种情况。sema4
是信号灯的缩写,是一个标志杆。在这种情况下,它向事件处理程序发送状态信号。
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