Как узнать, где находится точка вставки на панели "Слайды"?
В PowerPoint, в "нормальном" виде, окно разбивается на две панели, причем панель показывает миниатюры слайдов слева, а панель - текущий слайд справа. Вы можете выбрать более одного слайда на левой панели, что полезно, если вы хотите копировать, перемещать или удалять слайды.
Чтобы сказать, какие слайды в настоящий момент выбраны на левой панели, вы можете использовать ActiveWindow.Selection.SlideRange
, Однако если щелкнуть между слайдами на левой панели (миниатюра), вы получите точку вставки и:
ActiveWindow.Selection.Type
это ноль (ppSelectionNone
).ActiveWindow.Selection.SlideRange
выдает ошибку.
У меня вопрос в две половины:
- Как я могу обнаружить эту ситуацию? (Предположительно, есть другие случаи, когда типом выбора является "нет").
- Как я могу узнать, где находится точка вставки, чтобы я мог вставить новые слайды в этой точке?
Код VBA или VSTO будет в порядке:-)
2 ответа
Я только что нашел это: http://skp.mvps.org/pptxp020.htm
Резюме: переключиться на ppViewSlide
просмотреть, а затем снова вернуться, и PowerPoint выберет слайд перед точкой вставки (или первый слайд, если IP-адрес находится в начале).
Я все еще был бы заинтересован в лучшем способе, который избегает мерцания экрана, присущего этому подходу (и в идеале не меняет выбор).
Ответ на первый вопрос:
' The mouse cursor can be placed between slide thumbnails in the following views:
' - Normal View / Thumbnail Pane
' - Slide Sorter View
' - Slide Master View / Thumbnail Pane
' Returns true if the cursor is in the slide gap in these cases.
Function IsSlideGap() As Boolean
On Error Resume Next
With ActiveWindow
Select Case .View.Type
Case ppViewNormal, ppViewSlideMaster
' If the thumbnail pane (ViewType 11 or 12 ) is active but
' nothing is selected, we must be in the slide gap
If .Panes(1).Active And .Selection.Type = ppSelectionNone Then IsSlideGap = True
Case ppViewSlideSorter
If .Selection.Type = ppSelectionNone Then IsSlideGap = True
End Select
End With
End Function
Ответ на второй вопрос:
' Note: used by slide/gap context menus only so assumes
' either thumbnail pane or sorter view active
Function GetSlideCursorIndex() As Long
Dim lSlides As Long ' Track the number of slides in order
' to check if the temporary slide was deleted.
Dim oSld As Slide
lSlides = ActivePresentation.Slides.Count
' Insert a temporary new slide
CommandBars.ExecuteMso "SlideNew"
DoEvents
Set oSld = ActiveWindow.View.Slide
With oSld
GetSlideCursorIndex = .SlideIndex
.Delete
End With
If ActivePresentation.Slides.Count <> lSlides Then Debug.Print "Something went wrong!"
End Function