Закройте экземпляр Shell.Application - PullRequest
3 голосов
/ 27 мая 2020

Я пишу сценарий для открытия документов с помощью программы по умолчанию через оболочку Windows на основе этого ответа SO :

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.

Я упустил что-то очевидное? Сборщик мусора как-то тоже избавляется от экземпляра? Это что-то особенное c для самого объекта оболочки?

1 Ответ

0 голосов
/ 27 мая 2020

Если подумать, я почти уверен, что @jamheadart прав, и я просто создаю экземпляр класса VBA, а не создаю класс приложения в Windows.

Но для уверенности, я Я принимаю предложение @Mert Y использовать диспетчер контекста для ограничения объема.

Окончательный код:

With CreateObject("Shell.Application")
    .Open (strPath)
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...