Я начал обновлять надстройку для Word для Mac 2016, и неудивительно, что все идет не так хорошо. Может ли кто-нибудь помочь в том, что может быть не так с этим яблочным скриптом (или моим методом его вызова)? Я хорошо разбираюсь в VBA, но очень новичок в Applescript. Это должно найти файл или файлы и вернуть строку имен файлов с разделителями-запятыми. Я могу сказать, что сам Applescript работает, как и ожидалось (уведомление появляется и дает правильное значение). Но значение, похоже, не передается в VBA, который, похоже, получает пустую строку (хотя это трудно сказать, учитывая ограничения VBE в Word 2016 для Mac).
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. Браузер файлов в основном работает (иногда он зависает и не позволяет сделать выбор, но это, похоже, отдельная проблема). Я попытался использовать «указать приложению «Системные события» вернуться», как я видел на очень полезном сайте Рона ДеБрюина, но это не имело значения. Я также попытался вызвать очень, очень простой Applescript в стиле «Hello world», чтобы убедиться, что я вообще могу что-либо вернуть, и это сработало (вероятно, бесполезно, но здесь это):
on simple(sometext)
set myText to "Yo"
display notification myText with title "Hello"
return myText
end simple
Это только первый шаг в большом процессе, и теперь я немного волнуюсь. Надеюсь, кто-то может указать на какую-то глупую ошибку, чтобы я мог двигаться дальше.
(Для справки: большую часть своей надстройки я разрабатываю в Word 2010, но она работает и в Word 2011. Итак, у меня есть много вызовов MacScript, которые я пытаюсь обновить для Word 2016.)