我需要确定光标在PowerPoint幻灯片窗格中的位置,以便在正确的位置插入新的幻灯片。
当幻灯片被选中时,当前的幻灯片编号为Application.ActiveWindow.View.Slide.SlideIndex。当光标在幻灯片之间时,切换到另一个视图然后返回(例如,切换到幻灯片视图然后再切换到幻灯片排序器)选择光标前面的幻灯片,然后上述方法工作。
问题只出现在一种情况下:当光标位于第一张幻灯片之前或之后。前后切换视图,在两种情况下都将光标定位在第一张幻灯片上。
如何确定光标在幻灯片窗格中的位置是在第一张幻灯片之前还是之后?
问得好。
一个丑陋的方法是使用SendKeys喷射一个向下的键。如果光标位于第一张幻灯片上方,将导致第一张幻灯片被选中。如果光标位于幻灯片1和2之间,则将选择第二张幻灯片。稍微不那么难看的方法是使用.Execute方法来启动插入新幻灯片的正确控件,这应该模仿用户做同样的事情时得到的结果;如果插入的幻灯片的索引为1,则光标位于原始第一张幻灯片的上方。如果插入的幻灯片的索引为2,则光标最初位于幻灯片1和2之间。
或者使用SendKeys("^M")来完成同样的事情(在IDE中不能从w/工作,但在PPT中,您可以Alt+F8并选择宏来运行它)
Ex:如果光标位于第一张幻灯片上方,则显示1,如果位于幻灯片1和2之间,则显示2。这是必要的;否则,在下一行运行之前,PPT还没有创建幻灯片,就会出错。
Sub thing()
Dim lTemp As Long
SendKeys ("^M")
DoEvents
lTemp = ActiveWindow.Selection.SlideRange(1).SlideIndex
ActiveWindow.Selection.SlideRange.Delete
MsgBox lTemp
End Sub
我怀疑你想要添加一些安全检查,以确保现有的幻灯片不会被错误地删除,而不是你刚刚插入的幻灯片。
同意,SendKeys是坏的,执行更安全,但仍然有一点风险。
您可以迭代窗格集合并检查活动窗格的ViewType,而无需更改活动窗格或用户的选择点。如果ViewType = 11,则选择点在缩略图窗格中(然后您会想要使用Insert Dummy Slide技巧来确定它在缩略图窗格中的确切位置)。
Sub OhThePane()
Dim x As Long
With ActiveWindow
For x = 1 To .Panes.Count
If .Panes(x).Active Then
MsgBox "Pane: " & CStr(x) & vbCrLf & .Panes(x).ViewType
End If
Next
End With
End Sub
注意:如果你在PPT中运行这个,你必须使用Alt+F8来启动它。使用菜单栏/ribbon选项卡会将焦点从用户选择的窗格移开,并给您虚假的结果。