Как узнать, где находится точка вставки на панели "Слайды"?

В PowerPoint, в "нормальном" виде, окно разбивается на две панели, причем панель показывает миниатюры слайдов слева, а панель - текущий слайд справа. Вы можете выбрать более одного слайда на левой панели, что полезно, если вы хотите копировать, перемещать или удалять слайды.

Чтобы сказать, какие слайды в настоящий момент выбраны на левой панели, вы можете использовать ActiveWindow.Selection.SlideRange, Однако если щелкнуть между слайдами на левой панели (миниатюра), вы получите точку вставки и:

  • ActiveWindow.Selection.Type это ноль (ppSelectionNone).
  • ActiveWindow.Selection.SlideRange выдает ошибку.

У меня вопрос в две половины:

  1. Как я могу обнаружить эту ситуацию? (Предположительно, есть другие случаи, когда типом выбора является "нет").
  2. Как я могу узнать, где находится точка вставки, чтобы я мог вставить новые слайды в этой точке?

Код 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
Другие вопросы по тегам