【发布时间】:2020-05-27 05:29:27
【问题描述】:
我正在编写一个脚本,通过基于this SO answer 的 Windows shell 使用默认程序打开文档:
Dim Shex As Object
Set Shex = CreateObject("Shell.Application")
tgtfile = "C:\Nax\dud.txt"
Shex.Open (tgtfile)
我注意到Shell.Application 的实例永远不会关闭。在我的代码中,我是Set Shex = Nothing,但这足够了吗?例如,如果我创建一个 Word 或 Outlook 实例,我需要使用 .Quit 将其关闭,然后再将变量设置为空。这里没有明显类似的情况。
我设置了对Microsoft Shell Controls and Automation 的引用来探索Shell 对象,但找不到.Application 或.Parent 属性的任何方法,更不用说看起来像.Quit 的方法了。
我是否遗漏了一些明显的东西?垃圾收集器是否也以某种方式摆脱了实例?它是特定于 shell 对象本身的东西吗?
【问题讨论】:
-
我认为您并没有真正实例化应用程序;在 VBA 中创建的对象只允许您从 Shell GUI 获得对相同文件/文件夹层次结构的相同访问权限,因此一旦将对象设置为空,它就消失了。
-
或者换一种说法,你只是在实例化一个类,它为你提供了一个访问这个、那个和另一个的接口,而不是一个真正的独立应用程序。
-
您可能会发现此讨论很有帮助:stackoverflow.com/questions/42164719/how-to-destroy-an-object。一种建议是限制对象存在的范围,方法是在“with”语句中框定它。
标签: vba windows-shell