我已经开始更新Word for Mac 2016的加载项,不出所料,它并不是那么顺利。任何人都可以帮助解决这个AppleScript(或我调用它的方法)的错误吗?我很擅长VBA,但非常喜欢Applescript新手。这应该浏览一个或多个文件并返回以逗号分隔的文件名字符串。我可以说Applescript本身正在按预期运行(通知出现并给出正确的值)。但是这个值似乎没有达到VBA,它似乎收到一个空字符串(虽然考虑到Word 2016 for Mac中VBE的局限性很难说)。
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看到的那样,但这并没有什么不同。我也尝试过一个非常非常简单的“你好世界”#34;样式Applescript,以确保我能够返回任何东西,这是有效的(可能没有帮助,但在这里):
on simple(sometext)
set myText to "Yo"
display notification myText with title "Hello"
return myText
end simple
这只是大流程的第一步,现在我有点担心。希望有人可以指出一些愚蠢的错误,以便我可以继续前进。
(只是为了一点上下文,我在Word 2010中完成了大部分的加载项开发,但它适用于Word 2011.所以,我有很多MacScript调用,我试图更新for Word 2016。)
答案 0 :(得分:1)
也许这是一个错误或安全问题,我不知道,但是当你使用{时,你不能使用(choose ...
,display dialog
或display alert
)命令{1}}来自VBA脚本,AppleScriptTask
的结果将始终为空字符串。
因此,当您不需要VBA变量中的结果时,可以使用这些命令。
示例(运行此 AppleScript 时, AppleScriptTask 命令的结果为空字符串):
AppleScriptTask
您可以使用 MacScript()命令选择某个文件(它仍适用于 Microsoft Office 2016 ):
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