我尝试使用Excel VBA提取.CAB文件,但收到以下错误:
运行时错误'91':未设置对象变量或With块变量
当我忘记使用带Object的Set
时,通常会出现这种情况,但我已经检查过了。
我能找到的所有例子都是这个主题的变体:
Private Function DeCab(vSource, vDest) As Long
Dim objShell, objFileSource, objFileDest As Object
Set objShell = CreateObject("Shell.Application")
Set objFileSource = objShell.Namespace(vSource)
Set objFileDest = objShell.Namespace(vDest)
Call objFileDest.MoveHere(objFileSource.Items, 4 Or 16) 'Fails here
Decab = objFileDest.Items.Count
End Function
它不是在Set
行上失败,而是将objFileSource
和objFileDest
都设置为Nothing
,即使我已经确认vSource
和vDest
存在。
为了确认它与.CAB文件无关,我还尝试了在没有设置objFileSource
的情况下进行测试,并在设置objFileDest
后检查其值。它仍然返回Nothing
。为什么会这样?我使用的是Windows 7,64位,运行Office 2010。
3条答案
按热度按时间mqkwyuun1#
您的参数必须作为变量而不是字符串提交
https://msdn.microsoft.com/en-us/library/windows/desktop/bb774085(v=vs.85).aspx
vsnjm48y2#
蒂姆的答案是正确的。我也找到了另一个选择:
当您在VBA中将对象放在括号中时,它将返回该对象的默认值。显然,
objShell.Namespace
不能处理指针。它只能处理字符串文字。如果您正在传入String,则将签名更改为以下内容也有效:htrmnn0y3#
为了我的案子我用了贝壳
在两个不同的行。似乎我需要重新初始化,以便能够在第二行使用。例如
那就只有它能起作用。