我需要确定PowerPoint中幻灯片窗格中的光标位置,以便将新幻灯片插入正确的位置。
选择幻灯片时,当前幻灯片编号为Application.ActiveWindow.View.Slide.SlideIndex。 当光标位于幻灯片之间时,切换到另一个视图然后返回(例如,滑动视图然后返回幻灯片浏览器)选择光标前面的幻灯片,然后上面的方法工作。
问题出在一种情况:当光标位于第一张幻灯片之前或之后。在两种情况下,来回切换视图,将光标定位在第一张幻灯片上。
如何确定幻灯片中的光标位置是在第一张幻灯片之前还是之后?
答案 0 :(得分:1)
好问题。
一种丑陋的方法是使用SendKeys喷出一个向下箭头键。如果光标位于第一张幻灯片上方,则会导致选择第一张幻灯片。如果光标位于幻灯片1和2之间,则将选择第二张幻灯片。
使用.Execute方法触发插入新幻灯片的正确控件稍微不那么难看,这个幻灯片应该模仿用户在做同样事情时得到的内容;如果插入的幻灯片索引为1,则光标位于原始第一张幻灯片上方。如果插入的幻灯片索引为2,则光标最初位于幻灯片1和2之间。
或使用SendKeys(“^ M”)来完成同样的事情(在IDE中无法使用,但在PPT中你可以使用Alt + F8并选择宏来运行它。)
例如:如果光标位于第一张幻灯片上方,则显示1;如果光标位于幻灯片1和2之间,则显示2; DoEvnts是必需的;否则PPT在下一行运行之前没有创建幻灯片,并且错误输出。
Sub thing()
Dim lTemp As Long
SendKeys ("^M")
DoEvents
lTemp = ActiveWindow.Selection.SlideRange(1).SlideIndex
ActiveWindow.Selection.SlideRange.Delete
MsgBox lTemp
End Sub
我怀疑你想要添加一些安全检查,以确保不会错误地删除现有的幻灯片而不是你刚刚插入的幻灯片。
答案 1 :(得分:1)
同意,SendKeys不好,。执行更安全,但仍然有点风险。
您可以迭代窗格集合并检查活动窗格的ViewType,而无需更改活动窗格或用户的选择点。如果ViewType = 11,则缩略图窗格中的选择点(然后您需要执行“插入虚拟幻灯片”技巧以确定缩略图窗格中的确切位置)。
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启动它。使用菜单栏/功能区选项卡将使焦点远离用户选择的窗格,并为您提供虚假结果。