私はVBAにかなり慣れておらず、問題があります。このサイトで、私はコードを見つけました、そしてそれはうまく働きます、それはpdfとして最後のスライドを印刷します。
Sub PDFtesti()
timestamp = Now()
Dim PR As PrintRange
Dim lngLast As Long
Dim lngFirst As Long
Dim savePath As String
Dim PrintPDF As Integer
Dim name As String
name = ActivePresentation.Slides(2).Shapes("TextBox1").OLEFormat.object.Text
savePath = "C:\Powerpoint\" & Format(timestamp, "yyyymmdd-hhnn") & " - " & name & ".pdf"
lngLast = ActivePresentation.Slides.Count
With ActivePresentation.PrintOptions
.Ranges.ClearAll
Set PR = .Ranges.Add(lngLong, lngLong)
End With
ActivePresentation.ExportAsFixedFormat _
Path:=savePath, _
FixedFormatType:=ppFixedFormatTypePDF, _
PrintRange:=PR, _
Intent:=ppFixedFormatIntentScreen, _
FrameSlides:=msoTrue, _
RangeType:=ppPrintSlideRange
End Sub
ただし、スライド番号2と最後のページの2つのスライドを印刷してもらいたいと思います。だから私は私が考えることができるほとんどすべてを試しました
Set PR = .Ranges.Add(lngLong, lngLong)
Set PR = .Ranges.Add(2, 2)
そして
Set PR = .Ranges.Add(Array("lngLong, lngLong" & "2,2")
しかし、それはうまくいきません。おそらく、VBAについて十分に理解していないからでしょう。そこにソリューションを追加するのはそれほど難しいことではないように感じますが、私はそれを見つけることができないようです。
更新されたソリューション。特定のスライドの印刷をより快適にするために、それらを1つの変数(slidesToPrint)に入れることにしました。この変数に入れられていないすべてのスライドは、印刷の直前に非表示になります(したがって、印刷されません)。印刷後、非表示の順序は元に戻ります。したがって、印刷する必要のあるスライド、バストは次の行にリストされています。
slidesToPrint = Array(2, lngLast)
完全なコード:
Sub PDFtesti()
Dim timestamp As Date
Dim PR As PrintRanges
Dim lngLast As Long
Dim lngFirst As Long
Dim savePath As String
Dim PrintPDF As Integer
Dim name As String
Dim originalHides() As Long
Dim slidesToPrint() As Variant
Dim i As Variant
timestamp = Now()
With ActivePresentation
name = .Slides(2).Shapes("TextBox1").OLEFormat.Object.Text
savePath = "C:\Powerpoint\" & Format(timestamp, "yyyymmdd-hhnn") & " - " & name & ".pdf"
lngLast = .Slides.Count
.PrintOptions.Ranges.ClearAll
' Slides to print are put here (inside parentheses)
slidesToPrint = Array(2, lngLast)
ReDim originalHides(1 To lngLast)
For i = 1 To lngLast
originalHides(i) = .Slides(i).SlideShowTransition.Hidden
.Slides(i).SlideShowTransition.Hidden = -1
Next
For Each i In slidesToPrint()
.Slides(i).SlideShowTransition.Hidden = 0
Next
.ExportAsFixedFormat _
Path:=savePath, _
FixedFormatType:=ppFixedFormatTypePDF, _
Intent:=ppFixedFormatIntentScreen, _
FrameSlides:=msoTrue
For i = 1 To lngLast
.Slides(i).SlideShowTransition.Hidden = originalHides(i)
Next
End With
End Sub
コードでは、を使用しますPR As PrintRange
。ただし、2番目と最後の2つのページが必要なため、2つの範囲が必要になります。これはタイプPrintRange
ではなく、代わりにPrintRanges
です。この場合、次のようにします。
.Ranges.Add(2, 2)
.Ranges.Add(lngLast, lngLast)
ただし、関数ExportAsFixedFormat
はを受け入れるだけで、を受け入れないため、これは機能しPrintRange
ませんPrintRanges
。1つのオプションは、最初にPrintRanges(1)
ie (2、2)を使用し、次にPrintRanges(2)
ie (lngLast、lngLast)を使用して、両方のスライドを別々のファイルに印刷することです。しかし、これは本当にあなたが望むものではありません。
ソリューション。PR(1)を使用します(PR
はタイプですがPrintRanges
、PR(1)
はですPrintRange
)。PR(1)
最後の2つのスライドに対応する範囲です。秘訣は、印刷の直前に2番目のスライドをその位置lngLast - 1
(最後の1つ前)に移動し、印刷後に正しい場所に戻すことです。
これにより、2番目のスライドが最後の位置の1つ前に移動し
.Slides(2).MoveTo lngLast - 1
ます。これにより、元の位置に戻ります。
.Slides(lngLast - 1).MoveTo 2
完全なコード:
Sub PDFtesti()
Dim timestamp As Date
Dim PR As PrintRanges
Dim lngLast As Long
Dim lngFirst As Long
Dim savePath As String
Dim PrintPDF As Integer
Dim name As String
timestamp = Now()
With ActivePresentation
name = .Slides(2).Shapes("TextBox1").OLEFormat.Object.Text
savePath = "C:\Powerpoint\" & Format(timestamp, "yyyymmdd-hhnn") & " - " & name & ".pdf"
lngLast = .Slides.Count
Set PR = .PrintOptions.Ranges
PR.ClearAll
PR.Add lngLast - 1, lngLast
.Slides(2).MoveTo lngLast - 1
.ExportAsFixedFormat _
Path:=savePath, _
FixedFormatType:=ppFixedFormatTypePDF, _
PrintRange:=PR(1), _
Intent:=ppFixedFormatIntentScreen, _
FrameSlides:=msoTrue, _
RangeType:=ppPrintSlideRange
.Slides(lngLast - 1).MoveTo 2
End With
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加