我有几个VBA宏在Windows上无人参与运行。我正试图将它们移植到Mac m1,但在Mac上遇到了沙箱问题。每次宏试图打开一个新文件时,都会触发一个访问权限对话框。Microsoft文档指出GrantCessToMultipleFiles是部分解决方案。
我编写了以下代码来扫描目录并枚举其中的所有文件,以传递给GrantCessToMultipleFiles。不幸的是,当我将files数组传递给例程时,什么都没有发生,除了它返回一个True,表示已授予访问权限之外,什么都没发生。根本不显示任何权限对话框。
稍后,当我的代码试图打开枚举文件时,我会得到一个访问权限请求对话框。我认为可能有一个未记录的数组限制,所以只传递了几个文件,但得到了相同的结果。
我做错了什么?
Sub directoryGrant(dire)
Dim files() As String
Dim i, s, b As Boolean
i = 0
s = dir(dire)
If s = "" Then End
While s <> ""
ReDim Preserve files(i)
files(i) = s
i = i + 1
s = dir
Wend
b = GrantAccessToMultipleFiles(files)
If b = False Then i = i / 0
End Sub
正如我所说,如果上面的代码有效,它将只是部分解决方案,因为稍后我的代码会下载客户端文件,直到它们到达我才知道它们的名称。我需要能够在不触发权限对话框的情况下打开这些文件。
有没有什么方法可以在Mac上禁用Excel的应用程序沙盒,这样我就可以用自己的电脑做我的工作了?
*编辑更新。很早的时候,我就尝试过";授予完全磁盘访问权限";去超越那些不起作用的人。尝试GrantCessToMultipleFiles仅访问该目录,但该目录也不起作用。当时,我写了上面的代码,看看这是否可行。那里也没有欢乐。我最后尝试只授予访问某个特定文件的权限,但这也不起作用。要么这是M1的问题,要么我完全搞砸了,要么微软无论如何都没有让它发挥作用并发布。
我在Word 2019 VBA for Mac中遇到了类似的问题。看起来GrantCessToMultipleFiles的参数必须是一个数组,但这个数组必须只包含一个元素。我必须遍历不同数组中包含的文件列表,并在每次迭代中将用作GrantCessToMultipleFiles参数的数组的内容设置为仅等于一个文件名。代码如下
Dim FileToSplitFullPath As String
Dim PermissionCandidates
Dim fileAccessGranted As Boolean
Dim FileToCombine() As String
...
For FileToSplitCount = LBound(FileToCombine) To UBound(FileToCombine)
FileToSplitFullPath = CurrentPath & FileToCombine(FileToSplitCount)
PermissionCandidates = Array(FileToSplitFullPath)
fileAccessGranted = GrantAccessToMultipleFiles(PermissionCandidates)
Next FileToSplitCount
上面的代码以静默方式工作。我通过Split函数从外部文件填充FileToCombine((,但它可以用任何你想要的方式填充。我想上面的代码可以简单地在每次创建文件名时,在创建并以某种方式存储以供将来使用之后立即执行。我想这是Mac VBA中的一个错误。
查看Excel 2016 for Mac中线程VBA宏中发布的代码:SaveAs将无法使用CSV文件格式和https://answers.microsoft.com/en-us/msoffice/forum/all/vba-macro-in-excel-2016-for-mac-saveas-will-not/86d6855f-241d-4b8d-b233-cccd7184c67b我意识到问题在于GrantCessToMultipleFiles的参数(1(必须是一个数组,(2(必须在没有类型的情况下声明,(3(每次使用时必须只包含一个元素。
如果你只想在你的计算机上运行宏,你可以用"完全磁盘访问":
- 开放系统首选项
- 点击";安全性&"隐私">
- 打开选项卡";"隐私">
- 向下滚动到";"完全磁盘访问">
- 使用左下角的锁定图标进行身份验证
- 通过拖放或使用"+"按钮
您也可以尝试将GrantAccessToMultipleFiles
直接连接到目录(我对VBA不熟练(。