Метод Application.CreateObject (Outlook) | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
Создает объект автоматизации указанного класса.
Синтаксис
выражение. CreateObject
( _ObjectName_
)
выражение: переменная, представляющая объект Application.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
ObjectName | Обязательный | String | Имя класса создаваемого объекта. Сведения о допустимых именах классов см. в разделе Программные идентификаторы OLE. |
Возвращаемое значение
Значение Object, представляющее новый экземпляр объекта службы автоматизации. Если приложение уже запущено, CreateObject создаст новый экземпляр.
Этот метод предоставляется для автоматизации других приложений из microsoft Visual Basic Scripting Edition (VBScript) 1.0, который не включает метод CreateObject . CreateObject включен в VBScript версии 2. 0 и более поздних. Этот метод не следует использовать для автоматизации Microsoft Outlook из VBScript.
Примечание.
Методы CreateObject, часто используемые в примере кода в этом файле справки (доступные при нажатии кнопки «Пример»), становятся доступными в Microsoft Visual Basic или Microsoft Visual Basic для приложений (VBA). В этих примерах не используется тот же метод CreateObject , который реализован как часть объектной модели в Outlook.
Пример
В этом примере VBScript событие Open элемента используется для доступа к Windows Internet Explorer и отображения веб-страницы.
Sub Item_Open() Set Web = CreateObject("InternetExplorer.Application") Web.Visible = True Web.Navigate "www.microsoft.com" End Sub
В этом примере VBScript используется событие Click элемента управления CommandButton для доступа к Microsoft Word и открытия документа в корневом каталоге с именем «Resume.
doc».Sub CommandButton1_Click() Set Word = Application.CreateObject("Word.Application") Word.Visible = True Word.Documents.Open("C:\Resume.doc") End Sub
См. также
Объект Application
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Отправка писем из Outlook с помощью VBA макроса или PowerShell
Возникла задача организации рассылки писем по списку e-mail пользователей в Excel. В каждом письме будут содержаться некоторые данные, индивидуальные для каждого пользователя, и приложен персональный файл. В этой статье, мы рассмотрим, как использовать Outlook для автоматической рассылки писем по списку из Excel с помощью VBA макроса или PowerShell
Содержание:
- VBA макрос в Excel для рассылки писем из Outlook
- Отправить письмо из Outlook с помощью PowerShell
Важно. Оба способа отправки писем подразумевают, что на вашем компьютере установлен и настроен почтовый профиль Outlook. Именно с этого почтового ящика (и e-mail адреса) будет выполнятся рассылка.
Допустим, у нас есть Excel файл, содержащий следующие столбцы:
Email пользователя | ФИО | Время последней смены пароля | Статус учетной записи
В рамках моей задачи нужно каждому пользователю из списка отправить письмо вида:
Тема: Статус учетной записи в домене winitpro.ru
Тело письма: Уважаемый %FullUsername%
Ваша учетная запись в домене winitpro.ru — %status%
Время последней смены пароля: %pwdchange%
Совет. Если для учетных записей пользователей нужно получить значение одного из атрибутов пользователя в Active Directory, можно воспользоваться решением из статьи Функция Excel для получения данных пользователя из AD.
VBA макрос в Excel для рассылки писем из Outlook
Сначала рассмотрим небольшой макрос отправки писем на языке VBA (Visual Basic for Applications), который можно создать прямо в документе Excel.
Создайте новый макрос: вкладка Вид -> Макросы. Укажите имя макроса send_email и нажмите кнопку Создать:
В открывшемся редакторе VBA вставьте следующий код (я снабдил его всеми необходимыми комментариями). Для автоматизации отправки писем я воспользуюсь функцией CreateObject(«Outlook.Application»), позволяющей создать и использовать в скрипте объект приложения Outlook.
Sub send_email()
Dim olApp As Object
Dim olMailItm As Object
Dim iCounter As Integer
Dim Dest As Variant
Dim SDest As String
' тема письма
strSubj = "Статус учетной записи в домене winitpro.ru"
' создаем новый объект типа Outlook
Set olApp = CreateObject("Outlook.Application")
For iCounter = 2 To WorksheetFunction.CountA(Columns(1))
' создаем новый элемент (письмо) в Outlook
Set olMailItm = olApp.CreateItem(0)
strBody = ""
useremail = Cells(iCounter, 1). Value
FullUsername = Cells(iCounter, 2).Value
Status = Cells(iCounter, 4).Value
pwdchange = Cells(iCounter, 3).Value
'формируем тело письма
strBody = "Уважаемый " & FullUsername & vbCrLf
strBody = strBody & "Ваша учетная запись в домене winitpro.ru " & Status & vbCrLf
strBody = strBody & "Время последней смены пароля: " & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
'добавляем вложение, формат имени файла [email protected] . Если вложение не нужно, закомментируйте следующую строку
olMailItm.Attachments.Add ("C:\ps\" & useremail & ".txt")
olMailItm.BodyFormat = 1
' 1 - текстовый формат письма, 2 - HTML формат
olMailItm.Body = strBody
olMailItm.Send
'следующую строку можно использовать для отладки текста письма, закомментировав предыдущую
'MsgBox strBody
Set olMailItm = Nothing
Next iCounter
Set olApp = Nothing
dbg:
'отображение ошибок, если есть
If Err. Description <> "" Then MsgBox Err.Description
End Sub
Данный Excel файл нужно сохранить с расширением xlsm (формат книги Excel с поддержкой макросов). Для запуска рассылки выберите созданную процедуру (макрос) и нажмите кнопку выполнить.
Макрос последовательно перебирает все строки на листе Excel, формирует и отправляет по одному письму на каждый Email из списка. Отправленные письма сохраняются в папку
Отправить письмо из Outlook с помощью PowerShell
В PowerShell можно использовать командлет Send-MailMessage для отправки писем, однако он требует выполнения аутентификации на почтовом сервере перед отправкой и не поддерживает современные методы проверки подлинности, такие как в том числе OAuth и Microsoft Modern Authentication. Поэтому, если на вашем компьютер есть настроенный профиль Outlook, гораздо проще использовать его для отправки писем.
Ниже приведен пример скрипта PowerShell, который получает данные из Excel файла и использует Outlook для отправки письма для каждого пользователя:
# открыть Excel файл
$ExcelObj = New-Object -comobject Excel. Application
$ExcelWorkBook = $ExcelObj.Workbooks.Open("C:\PS\user_list.xlsx")
$ExcelWorkSheet = $ExcelWorkBook.Sheets.Item("Sheet1")
# Получаем количество заполненных строк в xlsx файле
$rowcount=$ExcelWorkSheet.UsedRange.Rows.Count
# Перебираем все строки в столбце 1, начиная со второй строки (в этих ячейках указано доменное имя пользователя)
for($i=2;$i -le $rowcount;$i++){
$useremail = $ExcelWorkSheet.Columns.Item(1).Rows.Item($i).Text
$FullUsername = $ExcelWorkSheet.Columns.Item(2).Rows.Item($i).Text
$Status = $ExcelWorkSheet.Columns.Item(4).Rows.Item($i).Text
$pwdchange = $ExcelWorkSheet.Columns.Item(3).Rows.Item($i).Text
# формируем тело письма
$strSubj = "Статус учетной записи в домене winitpro.ru"
$strBody = "Уважаемый " + $FullUsername
$strBody = $strBody + " `r`n Ваша учетная запись в домене winitpro.ru " + $Status
$strBody = $strBody + "`r`n Время последней смены пароля: " + $pwdchange
$strfile="C:\ps\" + $useremail + ". txt"
# предполагаем, что Outlook открыт, если нет нужно запустить его командой $outlook = new-object -comobject outlook.application
$email = $outlook.CreateItem(0)
$email.To = $useremail
$email.Subject = $strSubj
$email.Body = $strBody
# добавить вложение (если нужно)
$email.Attachments.add($strfile)
#отправить письмо
$email.Send()
}
$ExcelWorkBook.close($true)
Данный PowerShell скрипт предполагает, что на компьютере запущен Outlook. Для каждого email адреса из XLSX файла скрипт генерирует тему и текст письма и прикрепляет файл. Затем выполняется отправка письма.
Метод Application.CreateObject (Outlook) | Microsoft Узнайте
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
Создает объект автоматизации указанного класса.
Синтаксис
выражение . СоздатьОбъект
( _ИмяОбъекта_
)
выражение Переменная, представляющая объект Приложение .
Параметры
Имя | Требуется/дополнительно | Тип данных | Описание |
---|---|---|---|
Имя объекта | Требуется | Строка | Имя класса создаваемого объекта. Сведения о допустимых именах классов см. в разделе Программные идентификаторы OLE. |
Возвращаемое значение
Значение объекта, представляющее новый экземпляр объекта автоматизации. Если приложение уже запущено, CreateObject создаст новый экземпляр.
Этот метод предназначен для автоматизации других приложений из Microsoft Visual Basic Scripting Edition (VBScript) 1. 0, который не включает метод CreateObject . CreateObject был включен в VBScript версии 2.0 и выше. Этот метод не следует использовать для автоматизации Microsoft Outlook из VBScript.
Примечание
Методы CreateObject , обычно используемые в примере кода в этом файле справки (доступны при нажатии кнопки «Пример»), предоставляются Microsoft Visual Basic или Microsoft Visual Basic для приложений (VBA). В этих примерах не используется тот же метод CreateObject , который реализован как часть объектной модели в Outlook.
Пример
В этом примере VBScript используется событие Open элемента для доступа к Windows Internet Explorer и отображения веб-страницы.
Подэлемент_Открыть() Set Web = CreateObject("InternetExplorer.Application") Web.Visible = Истина Web.Navigate "www.microsoft.com" Конец сабвуфера
В этом примере VBScript используется событие Click элемента управления CommandButton для доступа к Microsoft Word и открытия документа в корневом каталоге с именем «Resume. doc».
Вспомогательная кнопка CommandButton1_Click() Установить Word = Application.CreateObject("Word.Application") Word.Visible = Истина Word.Documents.Open("C:\Resume.doc") Конец сабвуфера
См. также
Application Object
Поддержка и отзывы
Есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.
Электронная почта VBA| SuperExcelVBA
Код VBA позволяет отправлять электронные письма, проще всего это сделать с помощью Outlook.
Как показано в Библиотеки VBA , сначала необходимо включить справочную библиотеку, выполнив процедуру в формате Early Binding.
Для этого:
- В VBE ( + ) в строке меню щелкните Инструменты
- Открыть Ссылки (появится диалоговое окно Ссылки — VBAProject )
- Выберите библиотеку объектов Microsoft Outlook
- Нажмите ОК
Помните, что изменение кода для позднего связывания обеспечивает большую совместимость с предыдущими версиями.
Обязательно настройте учетную запись в Outlook, прежде чем запускать макросы.
Простая электронная почта
Выберите между Ранним или Поздним .
Код для Early Binding
В этом случае включите библиотеку Outlook, как описано выше.
Dim OutApp As Outlook.Application Затемнить OutMail как Outlook.MailItem Установить OutApp = Новый объект Outlook.Application для Outlook Set OutMail = OutApp.CreateItem(olMailItem) 'Объект для почты в Outlook
Код для Поздняя привязка
Dim OutApp As Object Затемнить OutMail как объект Set OutApp = CreateObject("Outlook.Application") 'Объект для Outlook Set OutMail = OutApp.CreateItem(0) 'Объект для почты в Outlook
Мы связываем значения с некоторыми свойствами объекта OutMail для построения электронной почты.
С исходящей почтой .body = "Здравствуйте" & vbNewLine & "Это пример письма" .Subject = "Пример темы" . To = "[email protected]" 'Заменить адрес электронной почты этой строки .Display 'Метод отображения содержимого Конец с
Метод .Display помогает в построении кода, так как он оставляет сообщение электронной почты видимым для проверки, хотя для работы кода это не обязательно.
Если все в порядке, просто отправьте его получателю:
OutMail.Send 'Отправить письмо
В качестве наилучшей практики отключайте объекты с помощью ключевого слова Ничего , чтобы удалить их из памяти.
Установить OutMail = Ничего Установить OutApp = Ничего
Затем у нас будет следующий процесс:
Sub simpleEmail() 'Использование позднего связывания Dim OutApp как объект Затемнить OutMail как объект Set OutApp = CreateObject("Outlook.Application") 'Объект для Outlook Set OutMail = OutApp.CreateItem(0) 'Объект для электронной почты в Outlook С исходящей почтой . body = "Здравствуйте" & vbNewLine & "Это пример письма" .Subject = "Пример темы" .To = "[email protected]" 'Заменить адрес электронной почты этой строки .Display 'Метод отображения содержимого Конец с OutMail.Send 'Отправить электронное письмо Установите OutMail = Ничего Установить OutApp = Ничего Конец сабвуфера
Электронное письмо с вложением и изображением
Мы можем создать макрос для отправки электронного письма с вложенным отчетом и его предварительным просмотром в виде изображения в теле сообщения.
Для этого упражнения у нас будет две книги: SalesReport.xlsx (отчет) и SendingEmail.xlsm (файл с макросом).
Предварительный просмотр файла SalesReport.xlsx
В модуле SendingEmail.xlsm мы можем добавить следующий код:
Sub sendEmail() 'Объявление переменных Dim i как целое число Dim WBk как новая рабочая книга Dim reportSheet As Worksheet Dim Rng As Range Dim ReportFile как строка Dim OutApp как объект Затемнить OutMail как объект 'Установить путь к отчету ReportFile = "C:\. ..\SalesReport.xlsx" 'Замените на путь, по которому находится файл SalesReport.xlsx. Установите WBk = Workbooks.Open (имя файла: = ReportFile, ReadOnly: = False, Notify: = False) ReportName = Right(ReportFile, (Len(ReportFile) - InStrRev(ReportFile, "\"))) Установите WBk = Workbooks (ReportName) 'Приведенный выше код эквивалентен: Set WBk = Workbooks("SalesReport.xlsx") Установите reportSheet = WBk.Worksheets(1) 'Вкладка отчета, из которой будет сгенерировано изображение 'Диапазон, в котором будет сгенерировано изображение Установить Rng = reportSheet.Range("A1:E6") 'Будет создана вкладка под названием "Temp" для временного хранения сообщений в теле письма. Листы.Добавить после:=WBk.Sheets(WBk.Sheets.Count) ActiveSheet.Name = "Время" 'Текст сообщения электронной почты Cells(1, 1) = "Всем дорогим" Cells(2, 1) = "Ниже представлен предварительный просмотр отчета о результатах." 'Мы будем использовать свойство WordEditor для вставки в тело сообщения электронной почты. 'Важно загрузить Outlook, чтобы свойство WordEditor работало правильно Оболочка ("C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE") Application.Wait (Now + TimeValue("0:00:05")) 'Подождите, пока откроется Outlook «Раннее связывание Установите OutApp = CreateObject("Outlook.Application") Установить OutMail = OutApp.CreateItem(olMailItem) С исходящей почтой .to = "[email protected]" 'Введите получателей как строку .CC = "[email protected]; [email protected]" 'Здесь копируются, также как String .Subject = "Отчет о результатах" 'Тема письма .Отображать Конец с Установите wEditor = OutApp.ActiveInspector.WordEditor 'Использование WordEditor для вставки элементов в тело письма OutApp.ActiveWindow.Activate 'Включить окно электронной почты для вставки Для i = от 1 до 2 Ячейки(i, 1).Выбрать Ячейки(i, 1).Копировать wEditor.Application.Selection.PasteSpecial xlPasteValues Далее я ReportSheet. Activate reportSheet.Range(Rng.Address).Select Selection.CopyPicture xlScreen, xlPicture 'Копировать как изображение wEditor.Application.Selection.Paste 'Приложение или архив SalesReport.xlsx без электронной почты С исходящей почтой .Attachments.Add (файл отчета) Конец с Application.DisplayAlerts = False 'Отключить оповещение о сообщении для непрерывного макроса Worksheets("Temp").Delete 'Удаление вкладки, созданной только для содержания текста, который будет отправлен Application.DisplayAlerts = Истина 'Беги сюда, если не хочешь отправлять письмо OutMail.Send Электронная почта 'Отключить переменные Установите WBk = Ничего Установите reportSheet = Ничего Установить OutApp = Ничего Установите OutMail = Ничего Установите wEditor = Ничего Конец сабвуфера
Обратите внимание, что в этом примере свойство WordEditor использовалось для выполнения задач, связанных с коллажем, в теле сообщения электронной почты, в отличие от простого примера, продемонстрированного ранее.