Excel 如何在MacOS上打开PowerPoint演示文稿

Excel 如何在MacOS上打开PowerPoint演示文稿,excel,vba,macos,powerpoint,Excel,Vba,Macos,Powerpoint,我有一个在Excel 2016(Windows)下运行的VBA代码,可以将图表导出到PowerPoint文件(.pptx)。 我正试图在MacOS上运行 我首先重写了FileDialogOpen函数,用于MacOS浏览并选择一个.pptx文件以打开进行编辑。 在MacOS(以及Office 2016)上打开拾取的文件时,我遇到以下错误: PowerPoint应用程序似乎已启动,但未加载指定的.pptx文件。我检查了文件名变量是否被分配给已拾取的完整路径文件名(包括扩展名.pptx) 代码在打开

我有一个在Excel 2016(Windows)下运行的VBA代码,可以将图表导出到PowerPoint文件(.pptx)。
我正试图在MacOS上运行

我首先重写了FileDialogOpen函数,用于MacOS浏览并选择一个.pptx文件以打开进行编辑。
在MacOS(以及Office 2016)上打开拾取的文件时,我遇到以下错误:

PowerPoint应用程序似乎已启动,但未加载指定的.pptx文件。我检查了文件名变量是否被分配给已拾取的完整路径文件名(包括扩展名.pptx)

代码在打开时失败

Sub Export_Charts_To_PPT_Presentation()
    
    Dim PptApp As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    
    Set PptApp = New PowerPoint.Application
    
    PptPresPath = FileDialogOpen
    If PptPresPath = "" Then Exit Sub
    Set PptDoc = PptApp.Presentations.Open(PptPresPath, WithWindow:=msoTrue)

End Sub

Function FileDialogOpen() As String

    mypath = MacScript("return (path to desktop folder) as String")

    sMacScript = "set applescript's text item delimiters to "","" " & vbNewLine & _
      "try " & vbNewLine & _
      "set theFiles to (choose file " & _
      "with prompt ""Please select a file or files"" default location alias """ & _
      mypath & """ multiple selections allowed false) as string" & vbNewLine & _
      "set applescript's text item delimiters to """" " & vbNewLine & _
      "on error errStr number errorNumber" & vbNewLine & _
      "return errorNumber " & vbNewLine & _
      "end try " & vbNewLine & _
      "return theFiles"

    FileDialogOpen = MacScript(sMacScript)
End Function

MacScript
已被弃用

本文:

向您介绍本文:

答案是您需要使用
applescriptask
重试。如果你被困在那里,那么你应该用你的AppleScriptTask代码打开一个新问题。

试试这个:

Sub Export_Charts_To_PPT_Presentation()
    
    Dim PptApp As PowerPoint.Application
    Dim PptDoc As PowerPoint.Presentation
    Dim PptPresPath As String
    
    PptPresPath = FileDialogOpen
    
    If PptPresPath = "" Or Right(PptPresPath, 5) <> ".pptx" Then Exit Sub
    
    Set PptApp = New PowerPoint.Application
    Set PptDoc = PptApp.Presentations.Open(PptPresPath, WithWindow:=msoTrue)

End Sub

Function FileDialogOpen() As String

    Dim iPathStartPosition As Integer
    
    mypath = MacScript("return (path to desktop folder) as String")
    sMacScript = "set applescript's text item delimiters to "","" " & vbNewLine & _
        "try " & vbNewLine & _
        "set theFiles to (choose file " & _
        "with prompt ""Please select a file or files"" default location alias """ & _
        mypath & """ multiple selections allowed false) as string" & vbNewLine & _
        "set applescript's text item delimiters to """" " & vbNewLine & _
        "on error errStr number errorNumber" & vbNewLine & _
        "return errorNumber " & vbNewLine & _
        "end try " & vbNewLine & _
        "return theFiles"
  
    FileDialogOpen = Replace(MacScript(sMacScript), ":", "/")
    
    If Val(FileDialogOpen) = -128 Then
        FileDialogOpen = ""
    Else
        iPathStartPosition = InStr(1, FileDialogOpen, "/Users")
        If iPathStartPosition > 0 Then
            FileDialogOpen = Right(FileDialogOpen, Len(FileDialogOpen) - iPathStartPosition + 1)
        End If
    End If
End Function
将图表导出到PPT演示文稿()
将PptApp设置为PowerPoint.Application
将PptDoc变暗为PowerPoint。演示文稿
将PptPresPath设置为字符串
PptPresPath=FileDialogOpen
如果PptPresPath=”“或Right(PptPresPath,5)“.pptx”,则退出Sub
设置PptApp=新建PowerPoint.Application
设置PptDoc=PptApp.Presentations.Open(PptPresPath,WithWindow:=msoTrue)
端接头
函数FileDialogOpen()作为字符串
Dim iPathStartPosition作为整数
mypath=MacScript(“返回(桌面文件夹的路径)为字符串”)
sMacScript=“将applescript的文本项分隔符设置为”“”&vbNewLine&_
“try”&vbNewLine&_
“将文件设置为(选择文件)&”_
提示“请选择一个或多个文件”“默认位置别名”“&”_
mypath&“允许多选为false)作为字符串“&vbNewLine&”_
将applescript的文本项分隔符设置为“”&vbNewLine&_
“on error errStr number errorNumber”&vbNewLine&_
“返回错误号”&vbNewLine&_
“结束尝试”&vbNewLine&_
“返回文件”
FileDialogOpen=Replace(MacScript(sMacScript),“:”,“/”)
如果Val(FileDialogOpen)=-128,则
FileDialogOpen=“”
其他的
iPathStartPosition=InStr(1,文件对话框打开,“/Users”)
如果iPathStartPosition>0,则
FileDialogOpen=Right(FileDialogOpen,Len(FileDialogOpen)-iPathStartPosition+1)
如果结束
如果结束
端函数

以下是有关AppleScriptTask的更多信息:感谢您的提示。我知道MacScript已被弃用,但问题似乎是另一个问题。在很短的时间内,只要我能够打开文件,我就保留MacScript。但是可以肯定的是,从长远来看,一旦我掌握了移植代码的全部功能,我将迁移到AppleScriptTask。顺便说一句,我意识到需要在Windows和MacOS上移植和维护VBA代码的开发人员的痛苦。在企业环境中,混合使用笔记本电脑是非常常见的……多亏了超级对称。我接受了你的代码并取得了一些进展。现在,我可以看到PowerPoint中打开的文件与以前的文件相比没有打开,但宏仍然停留在open语句上,错误消息与我以前发布的相同。请删除参数
WithWindow:=msoTrue
,然后重试一个问题:pptx文件是在Windows上创建的。是否应首先在Mac上使用PowerPoint手动打开和保存它,以确保它与PowerPoint Mac完全兼容,从而与PPT VBA兼容?删除WithWindow参数后:=msoTrue宏现在运行在Open语句之外。我现在正在调试其他代码。感谢Super Symmery。您好Super Symmery,鉴于Windows和MacOS上的VBA之间存在巨大差距,我们将采用不同的策略,以避免在两种环境上移植和维护脚本。基于服务器的方法将避免我们支持Mac/Win笔记本电脑的脚本。无论如何,我想感谢你在这篇文章上花时间帮助我。