在 Mac M1 上授予多个文件访问权限

问题描述 投票:0回答:2

我有几个在 Windows 上无人值守运行的 VBA 宏。我正在尝试将它们移植到 Mac m1,但在 Mac 上遇到了沙箱问题。

每次宏尝试打开新文件时,都会触发访问权限对话框。 Microsoft 文档指出 GrantAccessToMultipleFiles 作为部分解决方案。

我编写了以下代码来扫描目录并枚举其中的所有文件以传递给 GrantAccessToMultipleFiles。当我将文件数组传递给例程时,什么也没有发生,除了返回 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 的应用程序沙箱吗?

很早就尝试过对 Excel 进行“授予完全磁盘访问”。
尝试仅授予目录的 GrantAccessToMultipleFiles 。
那时,我写了上面的代码。
我终于尝试授予对特定文件的访问权限。

excel vba security appstore-sandbox
2个回答
0
投票

我在 Word 2019 VBA for Mac 中遇到了类似的问题。看起来 GrantAccessToMultipleFiles 的参数必须是一个数组,但该数组必须恰好包含一个元素。我必须迭代不同数组中包含的文件列表,并将用作 GrantAccessToMultipleFiles 参数的数组内容设置为每次迭代时仅等于一个文件名。代码如下所示

    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 我意识到问题在于 GrantAccessToMultipleFiles (1) 的参数必须是一个数组,(2) 必须声明为无类型,(3) 每次使用时只能包含一个元素。


-2
投票

如果您只想在计算机上运行宏,您可以将 Excel 添加到具有“全磁盘访问”的应用程序:

  • 打开系统偏好设置
  • 点击“安全与隐私”
  • 打开“隐私”选项卡
  • 向下滚动到“完整磁盘访问”
  • 使用左下角的锁定图标进行身份验证
  • 通过拖放或使用“+”按钮将 Excel 添加到列表

您也可以尝试直接

GrantAccessToMultipleFiles
进入目录(我不太熟悉VBA)。

© www.soinside.com 2019 - 2024. All rights reserved.