2016-11-30 2 views
0

Я не могу получить SaveAsFixedFormat, работающий из Excel VBA, для экспорта файла PowerPoint в формате PDF. Я прибегал к запуску макроса в предустановленной контрольной точке из Excel VBA, который экспортирует презентацию в формате pdf непосредственно из PowerPoint.Ссылка ячейка Excel в макросе PowerPoint для имени файла

Есть ли способ ссылаться на ячейку в файле Excel в этом макросе, который работает в PowerPoint, чтобы получить имя файла?

Sub pppdf() 

ActivePresentation.ExportAsFixedFormat "M:\random\test.pdf", 32 

End Sub 

Я могу сохранить файл PowerPoint в качестве .pptx из Excel и использовать изменения имен файлов и путей, но теперь я хотел бы ссылаться на те же пути и имена файлов в PowerPoint макрос, который экспортирует в формате PDF.

В конце концов, я хотел бы код, чтобы несколько выглядеть следующим образом, но это, очевидно, нуждается в некоторой работе, чтобы работать с PowerPoint:

Dim FName   As String 
Dim FPath   As String 

FPath = Range("SavingPath").Value 
FName = Sheets("randomworksheet").Range("A1").Text 

ActivePresentation.ExportAsFixedFormat FPath & FName & " Development" & ".pdf", 32 

Это PowerPoint макрос будет быть запущен из Excel и как файл PowerPoint и Excel Workbook и лист будут открыты, когда это будет выполнено.

ответ

0

Почему бы не открыть презентацию и сохранить его в формате PDF из Excel если основная часть кода в Excel все равно?

Sub SavePPTXasPDF() 

    Dim PPT As Object 
    Dim PP As Object 

    Set PPT = CreatePPT 
    Set PP = PPT.Presentations.Open("<FullPathToPresentation>") 

    PP.SaveAs ThisWorkbook.Path & Application.PathSeparator & "ABC", 32 'ppSaveAsPDF 

End Sub 


Public Function CreatePPT(Optional bVisible As Boolean = True) As Object 

    Dim oTmpPPT As Object 

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Defer error trapping in case Powerpoint is not running. ' 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    On Error Resume Next 
    Set oTmpPPT = GetObject(, "Powerpoint.Application") 

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'If an error occurs then create an instance of Powerpoint. ' 
    'Reinstate error handling.         ' 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    If Err.Number <> 0 Then 
     Err.Clear 
     On Error GoTo ERROR_HANDLER 
     Set oTmpPPT = CreateObject("Powerpoint.Application") 
    End If 

    oTmpPPT.Visible = bVisible 
    Set CreatePPT = oTmpPPT 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreatePPT." 
      Err.Clear 
    End Select 

End Function 

или если вы хотите запустить код в Powerpoint:

Public Sub Test() 

    Dim oXL As Object 
    Dim oWB As Object 
    Dim FName   As String 
    Dim FPath   As String 

    Set oXL = CreateXL 
    Set oWB = oXL.workbooks.Open("<Path&FileName>") 

    'Or if Workbook is already open: 
    'Set oWB = oXL.workbooks("<FileName>") 

    FPath = oWB.worksheets("Sheet1").Range("A1") 
    FName = oWB.worksheets("Sheet1").Range("A3") 

    ActivePresentation.ExportAsFixedFormat FPath & FName & " Development" & ".pdf", 32 

End Sub 

Public Function CreateXL(Optional bVisible As Boolean = True) As Object 

    Dim oTmpXL As Object 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'Defer error trapping in case Excel is not running. ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    On Error Resume Next 
    Set oTmpXL = GetObject(, "Excel.Application") 

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    'If an error occurs then create an instance of Excel. ' 
    'Reinstate error handling.       ' 
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    If Err.Number <> 0 Then 
     Err.Clear 
     On Error GoTo ERROR_HANDLER 
     Set oTmpXL = CreateObject("Excel.Application") 
    End If 

    oTmpXL.Visible = bVisible 
    Set CreateXL = oTmpXL 

    On Error GoTo 0 
    Exit Function 

ERROR_HANDLER: 
    Select Case Err.Number 

     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure CreateXL." 
      Err.Clear 
    End Select 

End Function 

Или вы могли бы, как вы просили, откройте презентацию внутри Excel и выполнить код, хранящийся в презентации:

Sub SavePPTXasPDF() 

    Dim PPT As Object 
    Dim PP As Object 

    Set PPT = CreatePPT 
    Set PP = PPT.Presentations.Open("<FullPath>") 
    PPT.Run PP.Name & "!Test" 

End Sub 

Это будет использовать макрос Test и использовать строку кода Set oWB = oXL.workbooks("<FileName>"), которая в настоящее время закомментирована в моем примере выше.

+0

Спасибо Даррен, вы положили много работы на этот ответ, но одна из ваших строк кода действительно открыла мне глаза. Я продолжал пытаться использовать ExportAsFixedFormat из Excel VBA, но «PP.SaveAs ThisWorkbook.Path & Application.PathSeparator &« ABC », 32 'ppSaveAsPDF', это отлично поработало. Просто используя SaveAs с нумерацией pdf. Большой! Еще раз спасибо! – cellintern

0

С какой проблемой вы сталкиваетесь с использованием ExportAsFixedFormat непосредственно из Excel VBE? Согласно documentation (который, кажется неправильным) и PowerPoint VBE IntelliSense, второй аргумент, FixedFormatType может быть только одно из двух значений:

ExportAsFixedFormat(Path, FixedFormatType, Intent, FrameSlides, _ 
        HandoutOrder, OutputType, PrintHiddenSlides, PrintRange, _ 
        RangeType, SlideShowName, IncludeDocProperties, KeepIRMSettings) 

FixedFormatType: 

ppFixedFormatTypePDF = 2 
ppFixedFormatTypeXPS = 1