以并排模式查找窗口

时间:2013-09-05 20:06:07

标签: excel vba excel-vba

"并排观看"和"同步滚动"使2个电子表格的比较比以往更容易。但是,没有"同步切换选项卡"功能,所以如果我切换到其中一个工作簿中的不同选项卡并继续滚动,同步滚动变得非常有趣。

嗯,我不应该抱怨,因为它都是手动完成的,我应该明智地使用这个功能。

作为一个懒惰的开发人员,我想编写一些代码来挖掘自己:我可以编写一个宏来自动执行并行模式下对等窗口上的工作表切换吗?

分为两步:

  1. 我如何知道某个窗口(很可能是ActiveWindow)是否处于并排模式?
  2. 如果是,我如何判断哪个窗口是它的同伴?
  3. 我完成了我的作业。看来Excel对此功能的编程不是很友好。有3种方法

    • BreakSideBySide()
    • CompareSideBySideWith(WindowName)
    • ResetPositionsSideBySide()

    和1个布尔属性

    • SyncScrollingSideBySide

    与此功能相关的Windows集合,但不足以解决我的问题。

    有谁知道如何实现这一目标?或者,这确实不可能吗?先感谢您。

1 个答案:

答案 0 :(得分:0)

您可以使用Workbook_SheetActivate事件来实现此目的:

http://msdn.microsoft.com/en-us/library/office/ff195710.aspx

如果您将此代码放入ThisWorkbook对象中,那么每次更改活动工作表时,它都会...

  1. 遍历所有名称不同的打开的工作簿
  2. 查找与您刚刚点击的工作表同名的工作表
  3. 激活其他工作簿中的工作表

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    
        For i = 1 To Application.Workbooks.Count
            If Application.Workbooks(i).Name <> ThisWorkbook.Name Then
    
                Dim otherWB As Workbook
                Set otherWB = Application.Workbooks(i)
                otherWB.Sheets(Sh.Name).Activate
    
            End If
        Next
    
    End Sub
    
  4. 请注意,这需要工作表存在于所有打开的工作簿中。如果不是,将导致错误。但是,您可以轻松添加错误处理以忽略具有未显示的相应工作表的工作簿。

    另请注意,当只打开两个工作簿时,最好使用它。我没有看过你提到的其他方法,但是可能存在一种方法来识别当前处于并行模式的两个工作簿,此时代码可以摆脱它的for循环并变得更简洁。