簡體   English   中英

Mac VBA | Excel / Powerpoint 2016(版本15.33)| Powerpoint在Shapes.AddTextBox方法上崩潰

[英]Mac VBA | Excel / Powerpoint 2016 (Vers. 15.33) | Powerpoint crashes on Shapes.AddTextBox method

我在excel中對VBA進行編碼,該文件試圖打開並保存Powerpoint文件的副本,然后在幻燈片中添加文本框。

在Mac環境中運行,以下代碼成功打開並保存了ppt文件,但是在試圖調用AddTextbox方法的With語句上,它將導致Powerpoint應用程序崩潰。 (EXC_BAD_ACCESS錯誤)

我沒有打開Powerpoint文件的問題,只有在運行此代碼時它才會崩潰。 我懷疑是Shapes.AddTextbox方法或其某些參數不受支持,但是我在互聯網上找不到相關的信息/參考。

如果有人能對此表示感謝,非常感謝。 另外,鑒於Mac和Windows對VBA的支持都不夠,Powerpoint自動化是否還有其他替代方法(例如Applescript)?

Option Explicit
Public Const COVER_SLIDE = 3
Dim param_ws As Worksheet

Sub Main()
    Set param_ws = ThisWorkbook.Worksheets("Param")

    'Open the template Powerpoint, save as a copy
    Dim PowerPointApp As PowerPoint.Application
    Dim myPresentation As PowerPoint.Presentation

    Set PowerPointApp = New PowerPoint.Application
    Set myPresentation = PowerPointApp.Presentations.Open(param_ws.Range("wk_dir").Value & "/" & param_ws.Range("ppt_temp_fileName").Value)
    myPresentation.SaveAs (param_ws.Range("wk_dir").Value & "/" & param_ws.Range("myfolder").Value & "/" & param_ws.Range("myfile").Value)

    PowerPointApp.Visible = True

    ' ##################   All good until here   ##################
    With myPresentation.Slides(COVER_SLIDE).Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=Application.InchesToPoints(5.71), Top:=Application.InchesToPoints(3.8), Width:=Application.InchesToPoints(3.47), Height:=Application.InchesToPoints(1.04))
        .TextFrame.TextRange.Text = "Hello"
        .TextFrame.TextRange.Font.Size = 28
        .TextFrame.TextRange.Font.Name = "Arial Narrow"
        .TextFrame.HorizontalAnchor = msoAnchorCenter
        .TextFrame.TextRange.Paragraphs.ParagraphFormat.Alignment = ppAlignRight
    End With
End Sub

這不是評論,而是答案,但是評論格式會對其進行哈希處理,所以這里是。

首先,我會改變

公共建築COVER_SLIDE = 3

Long = 3時的公共Const COVER_SLIDE

通常最好告訴vba您想要什么,而不是讓它猜測。 在這種情況下,它沒有什么區別,但是Mac VBA的幕后運行着一些奇怪的錯誤。

我還要驗證Mac Excel(在您所運行的版本中)是否確實具有Application.InchesToPoints方法。 如果不是這樣,添加文本框時,將英寸值乘以72很簡單。

最后,ppAlignRight是PowerPoint常量,而不是Office范圍或Excel常量,因此不會被定義,實際上,在IDE中編譯代碼時,它應該會導致錯誤(在嘗試運行之前,總是一個好主意)它)。 將其定義為:

Public Const ppAlignRight as Long = 3

或在代碼中使用3而不是ppAlignRight。

暫無
暫無

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

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