Excel:如果我在同一个工作簿上打开两个窗口,为什么macros在第一个窗口停止工作?

我正试图在Excel中设置一个button,以同时显示两个单独的工作表的双重视图。 这是我迄今为止所写的代码(见下文)。 到目前为止,代码似乎工作。 问题是顶部窗口在工作表上有一些ActiveX控件,他们似乎停止工作,直到底部的窗口再次closures。 为什么会发生这种情况,我该如何解决这个问题? 谢谢。

Private Sub DualViewButton_Click() Dim windowToPutOnTimeline As Window If Windows.Count = 1 Then ThisWorkbook.NewWindow Windows.Arrange xlArrangeStyleHorizontal, True, False, False Set windowToPutOnTimeline = Windows(1) If Windows(1).Top < Windows(2).Top Then Set windowToPutOnTimeline = Windows(2) End If With windowToPutOnTimeline .Activate HorizontalTimelineSheet.Activate .DisplayGridlines = False .DisplayRuler = False .DisplayHeadings = False .DisplayWorkbookTabs = False '.EnableResize = False End With Windows(2).Activate 'go back to the right focus the user expects. Else If Windows(1).Top = Windows(2).Top Then Windows.Arrange xlArrangeStyleHorizontal, True, False, False Else Windows.Arrange xlArrangeStyleVertical, True, False, False End If End If End Sub 

编辑:如果我切换窗口被分配到windowToPutOnTimeline然后问题消失。 所以我基本上解决了这个问题,却不知道为什么它以另一种方式工作。 (请参阅下面的代码片段)

 With ThisWorkbook Set windowToPutOnTimeline = .Windows(1) Set windowToPutOnDataSheet = .Windows(2) tmp = .Windows(1).Top .Windows(1).Top = .Windows(2).Top .Windows(2).Top = tmp End With 

此行为是ActiveX控件中的一个错误。

作为解决方法,使用表单控件中的button,而不是ActiveXbutton

使用表单button,你将需要添加一个模块,用你的代码声明一个Sub,并将Sub作为动作macros指定给你的button(就像把你的代码放在ActiveXbutton的单击事件中一样)

我在Excel 2007上试了这个,似乎工作正常 – button出现,并在两个窗口上工作