Разрешить сохранение в PDF только в Excel 2007/2010 - PullRequest
2 голосов
/ 16 декабря 2011

Есть ли способ заставить Excel всегда печатать файл в формате PDF?По какой-то причине стандартный код, который я нашел (на этом и других сайтах), похоже, не работает.

Вот код, который я использую:

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

У меня естьпростое поле ввода для ввода имени файла, и я бы хотел, чтобы они не делали ничего другого.В идеале я хотел бы поместить этот код в мое событие BeforeSave и мое событие BeforePrint, чтобы единственное, что они могли сделать, - это печатать в PDF.Это возможно?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Давным-давно я использовал PDFPrinter с открытым исходным кодом в сочетании с Excel. Вот часть кода, который я написал, который, кажется, делает то, что вы хотите. Может быть, вы можете использовать это как начало для собственного решения?

'Print the saved file as a pdf in the same directory

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 Engine

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

End Sub

С уважением,

Роберт Ильбринк

0 голосов
/ 16 декабря 2011

Вы получаете такую ​​ошибку или запускаете код?

«Ошибка автоматизации: вызванный объект отключился от своих клиентов» в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...