Word 2013分屏问题

时间:2014-06-26 13:03:10

标签: c# ms-word ms-office vsto

在Office 2010中,如果您录制宏来分割屏幕,则可以

ActiveWindow.SplitVertical = 50

但如果我在Office 2013中也这样做,我会

ActiveWindow.Panes(3).Activate
ActiveWindow.SplitVertical = 50

我不明白的是3号窗格。当我看起来只有2个窗格时(屏幕分割后),这怎么可能?此外,我删除了拆分然后再次运行宏,它倒下了,这并不令人惊讶,因为它试图激活一个在分割屏幕之前不存在的窗格。所以宏观的录制并没有给出应有的东西。

这对我很重要,因为我有一个c#vsto项目,它拆分屏幕并在顶部窗格中选择一段文本,在底部窗格中选择其他内容。使用Office 2010,这可以通过根据需要激活pane1或pane2来完美地工作,但是不能与Office 2013一起使用。我找到了一个解决方案,如果我想要底部窗格时激活pane3而不是pane2,它会做什么我想要,但这感觉不可靠,因为我不明白窗格2是什么。任何人都可以解释发生了什么,并建议一个可靠的方法来激活我感兴趣的窗格吗?

1 个答案:

答案 0 :(得分:0)

在Word 2013中,Panes集合在其成员中包含了一些但不是全部的Word任务窗格。例如,导航窗格可以显示三种类型的信息:标题,页面和结果。设置为标题时,此窗格不会计入Panes集合中。设置为Pages时,它将在Panes集合中计算。

更复杂的是,作为Panes集合成员的激活窗格有时会在整个Word会话期间将其索引保留在集合中。因此,如果将导航窗格设置为“页面”,在文档上使用,然后关闭该文档,则之后打开的第二个文档会拆分其窗口仍然可以通过使用导航窗格来影响其窗格集合索引文献。我能够以这种方式再现Panes(3)以及屏幕上显示的导航窗格(设置为页面)。

我还能够创建一个Panes(4)索引,并且由于各种各样的任务窗格(脚注,同义词库,拼写和语法等),可能会有更高的索引号。

但是,可以使用代码激活所需的文档窗格。 Panes集合Next属性将在文档窗格之间导航。此外,当拆分活动窗口时,底部窗格将成为活动窗格。此信息允许以下VBA代码(可以适用于VST加载项的C#):

Sub SelectCorrectPane()

Dim DocPaneTop As Integer
Dim DocPaneBottom As Integer
Dim PaneCount As Integer

PaneCount = ActiveDocument.ActiveWindow.Panes.Count

'The Next property switches between document panes but
'if the user is clicked into a task pane when the code executes Next
'cycles through the task panes until it gets to the document pane
For i = 1 To PaneCount
    ActiveDocument.ActiveWindow.ActivePane.Next.Activate
Next

ActiveWindow.SplitVertical = 50 'This activates bottom pane
DocPaneBottom = ActiveDocument.ActiveWindow.ActivePane.Index
ActiveDocument.ActiveWindow.ActivePane.Next.Activate 'this activates the top pane
DocPaneTop = ActiveDocument.ActiveWindow.ActivePane.Index

ActiveDocument.ActiveWindow.Panes(DocPaneTop).Activate
'Select text in top pane per OP

ActiveDocument.ActiveWindow.Panes(DocPaneBottom).Activate
'perform other actions in bottom pane per OP

End Sub

最后一点注意事项:由于某些未知原因,当使用

缩短时,上面的代码无法在我的电脑上运行
 With ActiveDocument.ActiveWindow
     'code here
 End With

虽然这可能与我的设置有关。