Office VBA 代码中的 popen 命令生成运行时错误“32815”

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

我正在 Mac OS BigSur 上运行 Word 16.63 (22070801)。

我正在尝试在 MacOS 上的 VBA 代码中调用 popen。

Private Declare PtrSafe Function popen Lib "libc.dylib" (ByVal command As String, ByVal mode As String) As Long

Sub AutoOpen()
    a = popen("whoami", "r")
End Sub

它会导致运行时错误:
enter image description here

vba macos ms-word ms-office
2个回答
2
投票

当系统策略阻止 Microsoft Office 应用程序加载外部

32815
文件时,会出现运行时错误代码
.dylib

该策略称为 Visual Basic 外部库绑定,其键为

DisableVisualBasicExternalDylibs
。无法在应用程序的用户界面中启用/禁用此策略。

该策略是针对 macOS 上的所有 Office 应用程序全局设置的。不能仅在单个应用程序上设置。

要启用该策略,请运行以下命令:

defaults write com.microsoft.office DisableVisualBasicExternalDylibs -bool true

任何调用从

.dylib
加载的外部 C 函数的 VBA 代码现在都会抛出
32815
错误。

要禁用该策略,请将其删除:

defaults delete com.microsoft.office DisableVisualBasicExternalDylibs

文档

详细了解Office for Mac 中的宏安全首选项

该策略还可以通过 macOS MDM 配置文件或使用 JAMF 配置来设置。


0
投票

这对我有用:

Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function popen _
        Lib "/usr/lib/libc.dylib" (ByVal command As String _
                                 , ByVal mode As String) As LongPtr
#Else
    Private Declare Function popen _
        Lib "libc.dylib" (ByVal command As String _
                        , ByVal mode As String) As Long
#End If

Sub AutoOpen()
#If VBA7 Then
    Dim a As LongPtr
#Else
    Dim a As Long
#End If
    a = popen("whoami", "r")
    Debug.Print a
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.