首页 > 解决方案 > 无法使用 VBScript 为 PowerPoint Print 设置 OutputType

问题描述

我可以通过 vbscript 打开一个 pptx 文件并打印它,但我一辈子都无法得到这个OutputType集合。无论我的格式如何,我都会不断收到此错误,我什至直接从 Microsoft 文档中复制。知道有什么问题吗?>

https://docs.microsoft.com/en-us/office/vba/api/powerpoint.printoptions

错误:

C:\Windows\system32>cscript.exe C:\tmp\print_ppt.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

C:\tmp\print_ppt.vbs(26, 9) Microsoft PowerPoint 2016: PrintOptions.OutputType : Invalid enumeration value.

代码:

Dim objPPT
Dim objPresentation
Dim objPrintOptions

Set objPPT = CreateObject("PowerPoint.Application")
objPPT.Visible = True

'Presentations.Open "filename", boolReadOnly, boolOpenUntitled, boolWithWindow
Set objPresentation = objPPT.Presentations.Open("C:\tmp\test.pptx",msoTrue,,msoFalse)

Set objPrintOptions = objPresentation.PrintOptions
objPrintOptions.PrintInBackground = False
   'https://docs.microsoft.com/en-us/office/vba/api/powerpoint.printoptions.outputtype
'objPrintOptions.OutputType = ppPrintOutputSixSlideHandouts
'objPresentation.PrintOut


With objPresentation 
    With .PrintOptions 
        .NumberOfCopies = 2 
        .Collate = False 
        .PrintColorType = ppPrintColor 
        .PrintHiddenSlides = True 
        .FitToPage = True 
        .FrameSlides = True 
        .OutputType = ppPrintOutputSlides 
    End With 
    .PrintOut 
End With

objPresentation.PrintOptions.PrintInBackground = True
objPPT.Quit
Set objPPT = nothing

标签: vbscriptpowerpoint

解决方案


VBA 和 VBScript 明显相似,但又有所不同。今晚对我来说这是一本很好的读物,开始看到一些“微小”的差异,如果你熟悉 VBA 并期望 VBScript 能同样工作,这会让你头疼。

https://www.oreilly.com/library/view/vbscript-in-a/1565927206/ch01s03.html#:~:text=VBScript%20is%20a%20subset%20of%20the%20Visual%20Basic%20for%20Applications %20language.&text=VBScript%20is%20an%20untyped%20language,variables%20in%20VBScript%20are%20variants

特别是关于如何的部分VBScript does not support named arguments.这是一个类似的情况,属性将与 VBScript 一起工作,但 VBA 中的语法有多个选项,VBScript 中只有一个可以工作。

在这种情况下,它使用的是数值。

另一个例子是我的线路 w/

    'Presentations.Open "filename", boolReadOnly, boolOpenUntitled, boolWithWindow
    Set objPresentation = objPPT.Presentations.Open("C:\tmp\test.pptx",msoTrue,,msoFalse)

这是使用positional参数与named值对。

这是我找到该选项的数字版本的地方,现在将一些逻辑编写到我的脚本中,以便最终用户可以传递一个参数,例如4和 expect 4Slides/Page

https://docs.microsoft.com/en-us/office/vba/api/PowerPoint.PpPrintOutputType

With objPresentation 
    With .PrintOptions 
        .PrintInBackground = False
       'https://docs.microsoft.com/en-us/office/vba/api/PowerPoint.PpPrintOutputType
       'https://docs.microsoft.com/en-us/office/vba/api/powerpoint.printoptions.outputtype
       .OutputType = 8 
    End With 
    '.PrintOut 
   .PrintOptions.PrintInBackground = True
End With

推荐阅读