VBA Powerpoint: Print Range funktioniert nicht!

Hallo zusammen!

Ich habe ein VBA Skript geschrieben das folgendes tut: Das Skript soll eine Presentation drucken. Dabei sollen prinzipiell alle ausgeblendeten Folien ignoriert werden. Befindet sich jedoch im Notizbereich der ausgeblendeten Folien der String ‚#printit‘, dann soll diese Folie auch gedruckt werden.

Meine Idee war es, über jede Folie zu iterieren und dann über jedes ‚Shape‘ im Notizbereich und dann dessen Inhalt prüfen. Falls es nicht den String enthält, setze ich einfach den Druckbereich auf die letzte Folie und mache bei der übernächsten weiter.

Ich bin neu in VBA und das ist mein erstes Projekt. Also wird der Quelltext ziemlich unsauber sein :slight_smile:

Mein Problem jedoch ist, dass wenn ich das Skript laufen lasse, immer nur der erste Bereich gedruckt wird und alle anderen nicht mehr. Zum Debuggen iteriere ich sogar über alle Druckbereiche der offenen Präsentation und es werden auch alle ausgegeben, die ausgegeben werden sollen.

Ich benutze OS X 10.11 El Capitan und Powerpoint 2016 (Office 365).

Wäre nett wenn jemand mir sagen würde warum dass nicht funktioniert, denn mir fällt da kein Fehler auf…


    ' TODO: re-design'
    With ActivePresentation.PrintOptions

        ' IMPORTANT! '
        .RangeType = ppPrintSlideRange
        .PrintHiddenSlides = True
        .OutputType = ppPrintOutputSixSlideHandouts
        
        ' clear all existing ranges '
        With .Ranges

            .ClearAll
        End With
    End With

    ' variables ... '
    Dim oSlide As Slide
    Dim oShape As Shape
    Dim oRange As Range

    Dim strNotes As String

    Dim intLow As Integer ' used for bounderies '
    Dim intHigh As Integer ' used for bounderies '
    Dim intTmp As Integer ' temp variable '
    Dim intPos As Integer ' position of #printit '

    ' intLow will always be 1 '
    intLow = 1

    ' Iterate over each slide in the current presentation '
    For Each oSlide In ActivePresentation.Slides

        ' set high to the current slide '
        intHigh = oSlide.SlideIndex

        ' if the slide is hidden, check for #printit '
        If oSlide.SlideShowTransition.Hidden = msoTrue Then

            ' Iterate over each shape in the notes section '
            For Each oShape In oSlide.NotesPage.Shapes

                ' proceed if type is placeholder '
                If oShape.Type = msoPlaceholder Then

                    ' proceed if text frame exists '
                    If oShape.HasTextFrame Then

                        ' get the content of the textframe '
                        strNotes = oShape.TextFrame.TextRange.Text

                        ' if the content is numeric and equals the slidenumber, just skip it --> just do the opposite and cproceed if not os'
                        If Not IsNumeric(strNotes) Then
                            
                            ' get the positon of #printit, if 0 the string could not be found '
                            pos = InStr(strNotes, "#printit")
                            MsgBox ("Checking for " & strNotes & " at " & pos)
                            If pos = 0 Then

                                ' set new bounderies '
                                Debug.Print "From " & intLow & " to " & (intHigh - 1)

                                ActivePresentation.PrintOptions.Ranges.Add intLow, (intHigh - 1)
                                ' low has to be high+1 (skip) '
                                intLow = intHigh + 1
                            End If
                        End If
                    End If
                End If
            Next oShape
        End If
    Next oSlide
 
    ' if low is greater than high: presentation ends with a hidden slide that should not be printed! '
    If intLow < intHigh Then
        'MsgBox ("Low is " & intLow & " and High is " & intHigh)
        ActivePresentation.PrintOptions.Ranges.Add intLow, (intHigh)
        Debug.Print "From " & intLow & " to " & intHigh
    End If

    For Each oRange In ActivePresentation.PrintOptions.Ranges
        Debug.Print "Start: " & oRange.Start & " End: " & oRange.End
    Next oRange

    ActivePresentation.PrintOut
End Sub

Hier ist die PPTX Datei die ich zum Testen nehme (vllt liegt es an dieser)
https://www.dropbox.com/s/qkkz32fb91d70wh/Presentation1.pptx?dl=0

In Zeile 78 wird der Rest des Codes auskommentiert. Damit ist der Rest außen vor. Hast du das im Originalcode auch so?

Ne das liegt an der Formatierung hier… Bei mir ist es nicht auskommentiert. Habe das Skript mal auf das minimale abgespeckt (also nur der PrintOptions Teil und dann einfach über

.Ranges.Add

den Bereich 1-2 und 4-5 getestet. Geht immer noch nicht.
Hat jemand von euch einen Windows PC und möchte das Skript mal über sie ppt laufen lassen? Vllt liegt es an osx…