【问题标题】:Only allow saving to PDF in Excel 2007/2010仅允许在 Excel 2007/2010 中保存为 PDF
【发布时间】:2012-01-21 15:37:12
【问题描述】:

有没有办法强制excel总是打印PDF格式的文件?由于某种原因,我找到的标准代码(在这个网站和其他网站上)似乎不起作用。

这是我正在使用的代码:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
cFileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

我有一个简单的输入框来捕获文件名,我想阻止他们做任何其他事情。理想情况下,我想将此代码放入我的 BeforeSave 事件和我的 BeforePrint 事件中,这样他们唯一能做的就是打印到 PDF。这可能吗?

【问题讨论】:

  • 你的代码做什么而不是工作?
  • 确保您的输入框应捕获文件的完整路径及其名称,例如 C:\Users\SONY\Desktop\Book1.pdf
  • 如果我不输入完整路径,会不会默认为当前路径?一旦我让它工作,我打算覆盖默认路径,所以我只关心名称。

标签: excel pdf printing


【解决方案1】:

您是否遇到此类错误或正在运行代码?

Excel 2000 中的“自动化错误:调用的对象已与其客户端断开连接”错误消息

如果是,请查看下面的链接

http://support.microsoft.com/kb/813120

在工作表中使用下面的代码

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Macro1
    End Sub

在新模块中添加以下代码

    Sub Macro1()
    cfilename = "C:\Users\SONY\Desktop\Book1.pdf" 'you can use the input box method to get the desired file name and location
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            cfilename, Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
            False
    End Sub

【讨论】:

  • 不,我没有收到任何错误 - 它只是没有保存。没有错误,什么都没有。
  • 没有错误,但也没有生成 PDF 文件。它似乎在运行,但没有输出。
  • 嗨,Jay,我使用了您提供的相同代码,并且在保存工作表时效果很好。单击打印时出现错误。
  • Kannan - 你是说它可以很好地保存为 PDF,但它不会打印为 PDF?好吧,我完全糊涂了。
  • @jay 您是否将 KannanS 中的代码的第一部分放入“ThisWorkbook”代码窗格中 - 它必须到那里才能捕获 BeforeSave 事件。打印事件重新路由将需要一段单独的代码
【解决方案2】:

很久以前,我将开源 PDFPrinter 与 Excel 结合使用。这是我编写的一些代码,似乎可以满足您的要求。也许您可以以此作为您自己解决方案的起点?

'将保存的文件打印为同一目录下的pdf

KTCurrentFilePath = ActiveWorkbook.Path 'Store current FilePath

'Define Variables for PDF printjob

Dim pdfjob As Object

Dim KTPDFName As String

Dim KTPDFPath As String

Dim KTPCurrentPrinter As String

'设置变量值

KTPDFName = Range("MyPDFName").Value & ".pdf"

KTPDFPath = ActiveWorkbook.Path & Application.PathSeparator

KTPCurrentPrinter = Application.ActivePrinter

'检查工作表是否为空,如果是则退出

If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub

'启动 PDF 引擎

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

On Error GoTo 0

With pdfjob

    If .cStart("/NoProcessingAtStartup") = False Then

        MsgBox "Can't initialize PDFCreator.", vbCritical + _

            vbOKOnly, "PrtPDFCreator"

            Application.ActivePrinter = KTPCurrentPrinter

        Exit Sub

    End If

    .cOption("UseAutosave") = 1

    .cOption("UseAutosaveDirectory") = 1

    .cOption("AutosaveDirectory") = KTPDFPath

    .cOption("AutosaveFilename") = KTPDFName

    .cOption("AutosaveFormat") = 0    ' 0 = PDF

    .cClearCache

End With

'将文档打印为 PDF

ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"

'等到打印作业进入打印队列

Do Until pdfjob.cCountOfPrintjobs = 1

    DoEvents

Loop

pdfjob.cPrinterStop = False

'等到 PDF 创建完成后再释放对象

Do Until pdfjob.cCountOfPrintjobs = 0

    DoEvents

Loop

pdfjob.cClose

Set pdfjob = Nothing

'重置打印机为默认值

Application.ActivePrinter = KTPCurrentPrinter

结束子

问候,

罗伯特·伊布林克

【讨论】:

  • Robert - 我是否需要一个 PDF 创建器加载项才能让我的 PDF 例程正常工作?我以为 Excel 是内置的?
猜你喜欢
  • 1970-01-01
  • 2013-05-16
  • 2015-08-28
  • 2010-11-15
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多