Макрос VBA не может открыть презентацию PowerPoint в MacOS - PullRequest
0 голосов
/ 13 июля 2020

У меня есть макрос VBA, работающий в Excel 2016 (Windows), который экспортирует диаграммы в файл PowerPoint (.pptx). Теперь я пытаюсь запустить этот макрос и в MacOS.

Сначала я переписал функцию FileDialogOpen для MacOS, чтобы просмотреть и выбрать один файл .pptx для открытия для редактирования. При открытии выбранного файла в MacOS (а также в Office 2016) я получаю следующую ошибку:

Сообщение об ошибке при открытии файла .pptx из VBA в MacOS

Кажется, что приложение 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

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Попробуйте следующее:

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
0 голосов
/ 13 июля 2020

MacScript устарело.

Эта статья: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/macscript-function

Указывает на эту статью: Функция MacScript работает некорректно в Office для Ma c 2016! Есть идеи?

Ответ в том, что вам нужно повторить попытку, используя AppleScriptTask. Если вы застряли там, вам следует открыть новый вопрос с помощью кода AppleScriptTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...