Mam kod, który wymaga ode mnie informacji, na którym SlideIndex
powinien działać (np. Gdzie wstawić nowy slajd, gdzie wstawić obiekt ChartObject itp. .). Około 99% czasu, można skutecznie uzyskaniem SlideIndex
przez:Jak uzyskać obiekt SlideIndex widocznego slajdu w programie Powerpoint, gdy SelectionType = ppSelectionNone
Dim w as Long 'slide index variable
w = ActivePresentation.Windows(1).Selection.SlideRange(1).SlideIndex
Inne 0,1% w czasie, gdy ActivePresentation.Windows(1).SelectionType = ppSelectionNone
, będzie to się nie uda, ponieważ (zrozumiałe) nie można uzyskać z następujących SlideIndex
wybór, ponieważ nie ma wyboru. Może się tak zdarzyć, jeśli użytkownik nieumyślnie "wybrał" przestrzeń między dwoma slajdami w panelu Schemat.
Co chciałbym zrobić, najlepiej jest uzyskać własność suwaka, który jest widoczny w panelu Slajdy SlideIndex
:
Obecnie mam jakiś kod, który sprawdza, czy SelectionType
jest ppSelectionNone
, więc może uwięzić warunek, po prostu nie wymyśliłem sposobu zidentyfikowania slajdu w panelu slajdów.
Function GetMySlide()
Dim w as Long
If Not ActivePresentation.Windows(1).Selection.Type = ppSelectionNone Then
w = ActivePresentation.Windows(1).Selection.SlideRange(1).SlideIndex
Set GetMySlide = ActivePresentation.Slides(w)
Else:
MsgBox "No slide is currently selected. Please select a slide in the Outline pane in order to proceed.", vbInformation
Set GetMySlide = Nothing
Exit Function
End If
End Function
Aktualizacja
Moje rozwiązanie tymczasowe jest użycie zmiennej publicznej lastUsedSlide
próbując śledzić ostatnio wybranego slajdu. Mogę włączyć to zdarzenie WindowSelectionChange
, ale miałem nadzieję, że będzie prostsze rozwiązanie. Gdybym myślał, że ta metoda będzie działała, to zawsze używałbym go, ale potencjalnie wprowadza nieprzewidziane błędy, ponieważ lastUsedSlide
nie jest niezawodnym proxy dla what_slide_i_am_currently_looking_at
.
Sprawdzę dwa razy, ale kiedy spróbowałem tego dziś rano, 'Activate' nadal pozostawiał mnie z' SelectionType = ppSelectionNone', więc nie byłem w stanie odnieść się do 'ActivePresentation.Windows (1) .Selection .SlideRange ... '. –
OK, myślę, że to może faktycznie zadziałać. Pozwól mi przetestować to nieco więcej :) –
Będąc w widoku normalnym (PPT2016 btw), mogę aktywować okienko 2 (Przesunięcie), a następnie okienko 1 (miniaturka), aby wymusić wybór miniatury, ale TYLKO podczas przechodzenia przez kod. W czasie wykonywania, kończę bez wyboru! –