PowerPoint - определить, находится ли курсор перед первым слайдом или после него - PullRequest
3 голосов
/ 05 октября 2011

Мне нужно определить положение курсора на панели слайдов в PowerPoint, чтобы вставить новый слайд в правильное положение.

Когда выбран слайд, текущим номером слайда является Application.ActiveWindow.View.Slide.SlideIndex.Когда курсор находится между слайдами, переключение на другой вид, а затем обратно (например, на вид слайдов и затем обратно на сортировщик слайдов) выбирает слайд непосредственно перед курсором, а затем работает вышеуказанный метод.в одном случае: когда курсор находится перед первым слайдом или после него.Переключение вида назад и вперед устанавливает курсор на первый слайд в обоих случаях.

Как определить, находится ли позиция курсора на панели слайдов перед первым слайдом или после него?

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Согласен, 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 для его запуска.Использование строки меню / вкладки ленты отодвинет фокус от выбранной пользователем панели и даст вам фиктивные результаты.

1 голос
/ 05 октября 2011

Хороший вопрос.

Одним из уродливых методов было бы использование SendKeys для нажатия клавиши со стрелкой вниз. Если курсор находится над первым слайдом, это приведет к выбору первого слайда. Если курсор находится между слайдами один и два, то будет выбран второй слайд.

Немного менее уродливо было бы использовать метод .Execute для запуска правильного элемента управления для вставки нового слайда, который должен имитировать то, что получает пользователь, когда он делает то же самое; если индекс вставленного слайда равен 1, то курсор находился над исходным первым слайдом. Если индекс вставленного слайда равен 2, курсор изначально находился между слайдами 1 и 2.

Или используйте SendKeys ("^ M"), чтобы выполнить то же самое (не будет работать с w / в IDE, но в самом PPT вы можете использовать Alt + F8 и выбрать макрос для его запуска.)

Пример: отображается 1, если курсор был над первым слайдом, 2, если он был между слайдами 1 и 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

Я подозреваю, что вы захотите добавить некоторые проверки безопасности, чтобы убедиться, что существующий слайд не будет ошибочно удален, а не только что вставленный.

...