每次Macro尝试访问文件时,Office 2016中的任何VB宏都会向用户显示一个对话框,要求获得权限!有没有办法避免它。
答案 0 :(得分:8)
与Office for Mac 2011中的VB宏不同,Office 2016 for Mac中的VB宏默认情况下无权访问外部文件。 Office 2016 for Mac应用程序是沙盒,因此缺少访问外部文件所需的权限。
如果应用程序尚无权访问,则更改现有宏文件命令以提示用户进行文件访问。这意味着访问外部文件的宏无法无人值守运行;他们将需要用户交互来在第一次引用每个文件时批准文件访问。
开发人员应使用 GrantAccessToMultipleFiles 命令(请参阅下一节)来避免此体验。此命令允许您的应用程序一次获得所有文件的权限,从而避免困难的用户体验。
GrantAccessToMultipleFiles
这允许您输入文件路径数组并提示用户访问它们的权限
Boolean GrantAccessToMultipleFiles(fileArray)
参数
返回值
注意:授予后,权限随应用程序一起存储,用户无需再授予该文件的权限。
实施例:
Sub requestFileAccess()
'Declare Variables
Dim fileAccessGranted As Boolean
Dim filePermissionCandidates
'Create an array with file paths for which permissions are needed
filePermissionCandidates = Array("/Users/<user>/Desktop/test1.txt", "/Users/<user>/Desktop/test2.txt")
'Request Access from User
fileAccessGranted = GrantAccessToMultipleFiles(filePermissionCandidates) 'returns true if access granted, false otherwise
End Sub
答案 1 :(得分:0)
我想使用 VBA 的 Kill 语法删除 Excel 中的文件,并在 VBA 尝试执行命令时收到权限提示。我的脚本应该日夜每 3 分钟运行一次,因此对单独的提示做出响应不会减少它。
为了解决这个问题,我为 VBA 的 Kill 函数创建了一个名为 myKill 的包装器。为了实现它,我:
在我的 VBA 代码中用 myKill 全局替换所有对 Kill 的调用。
添加了一个名为 myKill 的新 VBA 子例程(代码如下)
创建了一个 AppleScript 文件来实际删除文件(下面的代码)
在系统偏好设置/安全和隐私/隐私中授予 Excel 全磁盘访问权限。不确定这一步是否必要,但我提到了它,因为它是我当前的配置。没有前三步就毫无价值。
这是 myKill 子程序:
Sub myKill(fname As String)
Dim s As String
If Left(Application.OperatingSystem, 3) = "Mac" Then
s = AppleScriptTask("Kill.applescript", "Kill", fname)
Else
Kill fname
End If
End Sub
这里是 Kill.applescript 文件内容:
on Kill(fileName)
# implementation of vba kill command on Mac. Mac sandboxes Microsoft's
# kill command
tell application "System Events" to delete alias fileName
end Kill
Kill.applescript 文件必须存储在
/Users/your user name/Library/Application Scripts/com.microsoft.excel/Kill.applescript
Apple Script 第一次执行时,Mac OS 会请求 Excel 操作要删除的文件所在目录中的文件的权限。 一旦给出,目录中未来的文件删除将不会触发权限请求。我通过退出 Excel,重新输入并删除另一个文件进行了测试。
咆哮 任何人都认为让程序员跳过所有这些箍或每次必须删除文件时单击“确定”是一种可接受的实现,这超出了我的范围。因为 Microsoft 的某个人放弃了抽象简单的文件操作,例如 Kill 超过 10,000 名程序员已经看到这个网页试图弄清楚他们必须做什么才能删除 Microsoft Excel 中的文件。
哟,微软 VBA 项目经理!我和你说话呢!你的工作之所以存在,是因为乔尔·斯波尔斯基说服比尔·盖茨,尽管盖茨怀疑,但 Excel 的宏语言是个好主意。您的工作是确保 Excel VBA abstracts os weirdness 以便程序员可以完成他们的工作,而不必使用其他语言进行黑客攻击。