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
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