簡體   English   中英

從Excel調用宏以打開PowerPoint演示文稿,插入幻燈片以及將范圍復制到幻燈片有時會起作用,但會出錯

[英]Macro called from Excel to Open a PowerPoint Presentation, Insert a Slide, and Copy Range to Slide works sometimes, errors others

免責聲明-編寫VBA宏非常新,但是在嘗試修復此錯誤時,我在這里和其他論壇上進行了大量研究,但無濟於事。 抱歉,如果已經提出並回答了這個問題,也許我搜索不正確。

現在開始討論肉和土豆:我一直在使用Excel中的VBA宏,它將使我能夠:

  1. 打開一個新的或現有的PowerPoint演示文稿
  2. 將值粘貼到並激活特定的單元格,然后使用vlookup公式填充電子表格
  3. 從第一個電子表格復制到第二個電子表格,然后復制第二個電子表格
  4. 使PowerPoint可見,然后在特定位置插入新幻燈片
  5. 將Excel數據粘貼到新幻燈片上並相應地定位。

只要我在PowerPoint演示文稿已經打開的情況下運行宏,它就可以完美運行。 如果我嘗試在未打開演示文稿的情況下嘗試執行此操作,它將提示我選擇演示文稿文件,打開PowerPoint,運行Excel函數,但是當我嘗試使PowerPoint可見,添加幻燈片並將其粘貼時,它會掛起。數據。 在下面的代碼的第57行(pptApp.Visible = msoTrue) ,宏掛起並顯示“運行時錯誤'91'對象變量或未設置塊變量”消息。 我一直在撞牆,但似乎找不到我的錯誤。 任何幫助表示贊賞。

此外,一旦工作正常,我計划對其進行調整,以創建並插入總共25張幻燈片。 如果有人對創建第一張幻燈片並添加到中層甲板后如何做的想法或建議,以及隨后的后續新幻燈片,我很樂意聽到。 謝謝!!

主要例程:

Sub Final_Copy()

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim pptLayout As PowerPoint.CustomLayout
Dim pptShape As PowerPoint.Shape
Dim ws As Worksheet
Dim MyCell As Range, MyRange As Range
Dim rng As Excel.Range

Set rng = ThisWorkbook.ActiveSheet.Range("B1:I24")
Set MyRange = Sheets("Titles").Range("A2")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
Set ws = ThisWorkbook.Sheets("PBAC")

On Error Resume Next
Set pptApp = GetObject(, "PowerPoint.Application")
Err.Clear
If pptApp Is Nothing Then SelectPresentationType.Show


On Error GoTo 0

For Each MyCell In MyRange

    If MyCell.Value <> ("1100") Then
        Sheets("Titles").Select
        MyCell.Select
        Selection.Copy
        Sheets("PBAC").Select
        Sheets("PBAC").Range("B25").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Sheets("PBAC").Range("B25").Activate

        With ws.UsedRange
            .Copy
            ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count), Count:=1, Type:=xlWorksheet
            Sheets(Sheets.Count).Name = MyCell.Value
            Selection.PasteSpecial Paste:=xlPasteValues, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteColumnWidths
            Selection.PasteSpecial Paste:=xlPasteFormats
            Application.CutCopyMode = False
            ActiveSheet.Rows("1").RowHeight = 44.25
            ActiveSheet.Rows("2").RowHeight = 34.5
            ActiveSheet.Rows("3").RowHeight = 18.75
            ActiveSheet.Rows("4").RowHeight = 31.5
            ActiveSheet.Rows("18").RowHeight = 31.5
            ActiveSheet.Rows("5:17").RowHeight = 21.75
            ActiveSheet.Rows("19:24").RowHeight = 21.75
            ActiveWindow.DisplayGridlines = False
            ActiveWindow.Zoom = 69
        End With
Set rng = ThisWorkbook.ActiveSheet.Range("B1:I24")
    pptApp.Visible = msoTrue
    pptApp.Activate
Set pptPres = pptApp.ActivePresentation
Set pptLayout = pptPres.Slides(1).CustomLayout
Set pptSlide = pptPres.Slides.AddSlide(17, pptLayout)
rng.Copy
pptSlide.Shapes.PasteSpecial ppPasteEnhancedMetafile
Set pptShape = pptSlide.Shapes(pptSlide.Shapes.Count)
With pptShape
  .LockAspectRatio = msoTrue
  .Width = 725
  .Height = 450
  .Top = 55
  .Left = 9
End With
Application.CutCopyMode = False

    End If
Next MyCell

End Sub

SelectPresentationType用戶表單的代碼,用於選擇現有或新的演示文稿:

Private Sub Create_New_Click()

Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
    SelectPresentationType.Hide
Set pptApp = CreateObject(class:="PowerPoint.Application")
    pptApp.Visible = True
    pptApp.Activate
Set myPresentation = pptApp.Presentations.Add

End Sub

Private Sub Existing_Presentation_Click()

Dim strFilePath As String
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
    SelectPresentationType.Hide
    strFilePath = Application.GetOpenFilename
        If strFilePath = "False" Then Exit Sub
Set pptApp = New PowerPoint.Application
Set pptPres = pptApp.Presentations.Open(strFilePath)
    pptApp.Visible = True

End Sub

主程序和按鈕單擊處理程序中的pptPres均變暗。

您將pptPres(單擊處理程序中的那個)設置為一個演示文稿,pptPres超出范圍,並且從按鈕處理程序子菜單返回時消失,其余代碼在ITs的本地pptPres副本中沒有引用該演示文稿。

建議:

編寫一個函數,該函數顯示“打開/保存”對話框(就像您已經做的那樣),打開演示文稿,並將對演示文稿對象的引用返回到您的主代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM