2016-05-10 11 views
0

Я начал обновлять надстройку для Word для Mac 2016, и, что неудивительно, все идет не так хорошо. Может ли кто-нибудь помочь в том, что может быть неправильно с этим applescript (или мой метод его вызова)? Я хорошо разбираюсь в VBA, но очень новичок в Applescript. Это должно искать файл или файлы и возвращать строку имен файлов с разделителями-запятыми. Я могу сказать, что сам Applescript работает как ожидалось (уведомление появляется и дает правильное значение). Но значение, похоже, не делает его для VBA, который, кажется, получает пустую строку (хотя трудно сказать, учитывая ограничения VBE в Word 2016 для Mac).Возвращение значения с помощью Applescripttask (Word для Mac 2016)

VBA (упрощены для краткости):

#If MAC_OFFICE_VERSION >= 15 Then 
    Dim args As String, MyFiles As String 
    'These variables have been set elsewhere and I can confirm with Debug.Print that they are as expected. 
    args = MyBrowseTypes & ";" & browseMulti & ";" & browsePath 
    MyFiles = Applescripttask("scrHelperAS.scpt", "browseFiles", args) 
    ' This prints true, for what that's worth 
    If MyFiles = "" Then 
    Debug.Print "True" 
    Else: Debug.Print "False" 
    End If 
#End If 

Applescript (это в файле с именем, как было отмечено выше, помещенного в правильном месте):

on browseFiles(argString) 
    --open file browser and return selection 
    set {sFileType, bMultiples, sDefPath} to SplitString(argString, ";") 
    set sFileTypes to SplitString(sFileType, ",") 
    if bMultiples is "true" then 
    set thePrompt to "Please select a file or files" 
    else 
    set thePrompt to "Please select a file" 
    end if 

    set AppleScript's text item delimiters to "," 
    set theFiles to (choose file of type sFileTypes with prompt thePrompt multiple selections allowed bMultiples default location alias POSIX file (sDefPath)) as string 
    ' I don't know if this is/should be necessary, added to try to fully coerce the return value to a string. Didn't work without it, still doesn't work with it. 
    set theFilesStr to joinList(theFiles, ",") 
    set AppleScript's text item delimiters to "" 

    display notification theFilesStr with title "Files" 
    return theFilesStr 
end browseFiles 

я сделал небольшие изменения к уведомлению, чтобы гарантировать, что это не какая-то проблема кеширования с Applescript. Браузер файлов в основном работает (иногда он застревает и не позволяет делать выбор, но это, по-видимому, отдельная проблема). Я попытался использовать «сообщить приложение» «Системные события», чтобы вернуться », как я увидел на Ron DeBruin's very helpful site, но это не меняло. Я также попробовал называть очень, очень простой« Hello world »стиль Applescript, чтобы убедиться, что я способен возвращение вообще ничего, и что работал (вероятно, не полезно, но здесь это.):

on simple(sometext) 
    set myText to "Yo" 
    display notification myText with title "Hello" 
    return myText 
end simple 

Это только первый шаг в большом процессе, и теперь я немного волновалась Надеюсь, кто-то может указать из-за какой-то немой ошибки, чтобы я мог двигаться дальше.

(Просто для небольшого контекста, я делаю большую часть моей разработки надстройки в Word 2010, но работает в Word 2011. Итак, у меня много вызовов MacScript, которые я пытаюсь обновить для Word 2016.)

ответ

1

Может быть, это ошибка или проблема безопасности, я не знаю, но вы не можете использовать (choose ..., display dialog или display alert) команды при использовании AppleScriptTask из сценария VBA, результат будет AppleScriptTask всегда будет пустой строкой.

Таким образом, вы можете использовать эти команды, когда вам не нужен результат в переменной VBA.


Пример (результат команды AppleScriptTask пустая строка, если его запустить этот AppleScript):

on simple(sometext) 
    set myText to sometext as string 
    display notification myText with title "Hello" 
    return text returned of (display dialog "Type some word" default answer myText) 
end simple 

Вы можете использовать MacScript() команда выбрать файл (он по-прежнему работает на Microsoft Office 2016):

browsePath = "/Users/myUserName/Documents/someFolder/" 
MyBrowseTypes = """xls"", ""doc""" 
browseMulti = True 
If browseMulti Then 
    myPrompt = "Please select a file or files" 
Else 
    myPrompt = "Please select a file" 
End If 
myScript = "set theFiles to (choose file of type {" & MyBrowseTypes & "} " & _ 
      "with prompt """ & myPrompt & """ default location (""" & _ 
      browsePath & """ as posix file as alias) multiple selections allowed " & browseMulti & ")" & vbNewLine & _ 
      "set {TID, text item delimiters} to {text item delimiters, "",""}" & vbNewLine & _ 
      "set theFiles to theFiles as text" & vbNewLine & _ 
      "set text item delimiters to TID" & vbNewLine & _ 
      "return theFiles" 

MyFiles = MacScript(myScript) 
Debug.Print MyFiles 
+0

Спасибо! Я понятия не имел, что MacScript по-прежнему подходит для решения некоторых задач. – Christina

 Смежные вопросы

  • Нет связанных вопросов^_^