VBA: Shell.Application 命名空间函数失败,依赖于调用 sub 时的变量声明

VBA: Shell.Application Namespace function fails dependent on variable declaration in calling sub

我遇到过 Shell.Application 对象的命名空间方法似乎因调用子中缺少变量声明而失败的情况。

下面是一个简化的测试用例:

Function TestShellApplicationNamespace(folder)

Dim oShell: Set oShell = CreateObject("Shell.Application")
Dim oDir: Set oDir = oShell.Namespace(folder)

Debug.Print TypeName(folder)

If oDir Is Nothing Then
    Debug.Print "oDir is Nothing"
Else
    Debug.Print "oDir is not Nothing"
End If

End Function

调用者:

Sub CallTestShellApplicationNamespace()

Dim folder As String

folder = "C:\"

TestShellApplicationNamespace folder

folder2 = "C:\"

TestShellApplicationNamespace folder2

End Sub

我从 运行 得到的结果是:

String
oDir is Nothing
String
oDir is not Nothing

我不确定这是 VBA 解释器中的错误,还是我做错了什么。

编辑:提交后,还发现了以下相关的内容(虽然不完全相同)

Shell接口奇怪,它希望参数按值传递所以将函数原型更改为:

Function TestShellApplicationNamespace(ByVal folder As Variant)

(或用额外的括号调用)

TestShellApplicationNamespace (folder)
ret = TestShellApplicationNamespace((folder))

您真的应该将 IDE 配置为完全没有 运行 带有未声明变量的代码。