Я знаю, что на этот вопрос дан ответ, но я подумал, что добавлю, что такие приложения, как Outlook (и я также считаю, что PowerPoint), являются приложениями с одним экземпляром - нет необходимости определять, открыт ли Outlook, потому что выможет работать только одна копия Outlook.
http://msdn.microsoft.com/en-us/library/aa164542(v=office.10).aspx
Если вам нужно создать экземпляр Outlook, просто используйте CreateObject для создания экземпляра;если Outlook уже запущен, ссылка на ваш объект будет указывать на существующий экземпляр.Если нет, вы создадите класс.Привязка (поздняя или ранняя) не имеет значения.
Например, допустим, что Outlook не работает.Мы можем использовать этот код для создания экземпляра:
Sub testOutlook()
Dim olApp As Object ' Outlook.Application
Set olApp = CreateObject("Outlook.Application")
MsgBox (olApp2 Is Nothing)
End Sub
Это выведет «False», потому что мы создали экземпляр.
Допустим, Outlook работает.Мы можем использовать этот код, чтобы убедиться, что с помощью GetObject и CreateObject будет ссылаться на существующий экземпляр:
Sub testOutlook()
Dim olApp As Object ' Outlook.Application
Dim olApp2 As Object ' Outlook.Application
Set olApp = GetObject(, "Outlook.Application")
MsgBox (olApp Is Nothing)
Set olApp2 = CreateObject("Outlook.Application")
MsgBox (olApp2 Is Nothing)
MsgBox "Same object? " & (olApp Is olApp2)
End Sub
Это выведет «False» (существующий экземпляр), «False» (наш предполагаемый «новый экземпляр»), но последнее окно сообщения имеет значение «True», поскольку новый экземпляр на самом деле является тем же объектом, что и существующий экземпляр.
Так что же нам делать, если мы не знаем, запущен Outlook или нет?Как показано выше, CreateObject либо создает новый экземпляр (если он не существует, как в первом примере), либо подключает существующий экземпляр, если Outlook уже открыт (как во втором примере).