Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 以并排模式查找窗口_Vba_Excel - Fatal编程技术网

Vba 以并排模式查找窗口

Vba 以并排模式查找窗口,vba,excel,Vba,Excel,“并排查看”和“同步滚动”使两个电子表格的比较比以往更容易。但是,没有“同步切换选项卡”功能,因此如果我切换到其中一本工作簿中的其他选项卡并继续滚动,同步滚动会变得非常有趣 嗯,我不应该抱怨,因为这都是手动完成的,我应该明智地使用这个功能 作为一个懒惰的开发人员,我想写一些代码来挖掘自己:我可以写一个宏来自动在对等窗口上以并排模式切换工作表吗 它分为两个步骤: 如何知道窗口(最可能是ActiveWindow)是否处于并排模式 如果是,我如何分辨哪个窗口是它的对等窗口 我做了家庭作业。在这个功能上

“并排查看”和“同步滚动”使两个电子表格的比较比以往更容易。但是,没有“同步切换选项卡”功能,因此如果我切换到其中一本工作簿中的其他选项卡并继续滚动,同步滚动会变得非常有趣

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

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

它分为两个步骤:

  • 如何知道窗口(最可能是ActiveWindow)是否处于并排模式
  • 如果是,我如何分辨哪个窗口是它的对等窗口
  • 我做了家庭作业。在这个功能上,Excel似乎不是很友好。有3种方法

    • BreakSideBySide()
    • comparesidebysdewith(WindowName)
    • ResetPositionsSideBySide()
    和1布尔属性

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


    有人知道如何做到这一点吗?或者,这真的不可能吗?先谢谢你

    您可以使用工作簿\u SheetActivate事件来实现这一点:

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

  • 使用不同的名称循环浏览所有打开的工作簿
  • 查找与刚才单击的工作表同名的工作表
  • 激活其他工作簿中的工作表

    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
    
    Private子工作簿\u SheetActivate(ByVal Sh作为对象)
    对于i=1到Application.Workbooks.Count
    如果是Application.Workbooks(i),请将此工作簿命名为。然后命名
    将其他WB设置为工作簿
    设置otherWB=Application.workbook(一)
    其他工作表(Sh.Name)。激活
    如果结束
    下一个
    端接头
    
  • 请注意,这要求工作表存在于所有打开的工作簿中。否则将导致错误。但是,您可以很容易地添加错误处理以忽略带有未找到的相应工作表的工作簿


    还请注意,最好在只有两个工作簿打开时使用此选项。我没有研究过您提到的其他方法,但是可能存在一种方法来识别当前处于并排模式的两个工作簿,在这一点上,代码可以摆脱for循环,变得更加简洁

    谢谢Reband先生提供的激活工作表的代码片段。然而,我的问题是在并排视图中找出对等窗口。是的,如果只有两个可见窗口(或工作簿),那么就更容易了——没有选择是最好的选择。但不幸的是,情况并非总是如此。并排比较两个窗口,并跟踪第三个文件中的差异——这是我在工作中通常做的事情。您可以通过使用专用工作簿变量存储要比较的工作簿的名称来解决这一问题,然后编写一个单独的方法,该方法调用
    CompareSideBySideWith
    ,并设置专用工作簿变量。这样,您就不需要循环任何内容,您可以比较两个文件,并在第三个文件中查找差异。或者,您可以打开一个新的Excel实例,并将第三个工作簿保留在那里。似乎我能得到的最接近的方法是循环所有打开的工作簿,并使用相同的名称切换工作表。也就是说,如果这本书有一张有这个名字的纸。这并不理想,但我想它不会伤害任何人:)