1. Для того чтобы присутствовали заголовки данных каким образом лучще прописать в этом случае? 2. В случае использования SQL, нужно создавать дополнительный фильтр, если я правильно понимаю. Сейчас выгружаются данные за весь период. Как лучше прикрутить ибо и SQL для меня пока далеко. 3. А каким образом возможно добавить Recipients Emails?
Public Sub Test()
Dim outApp As New Outlook.Application
Dim nSpace As Outlook.Namespace
Dim pFolder As Outlook.Folder
Dim pItems As Outlook.Items
Dim pMail As MailItem
Set nSpace = outApp.GetNamespace("MAPI")
Set pFolder = nSpace.Folders("vasya.pupkin@hp.com")
Set pFolder = pFolder.Folders("Sent Items")
Set pItems = pFolder.Items
Set pMail = pItems.Find("[SentOn] > '09/01/2020' And [SentOn] < '09/24/2020'")
Do Until pMail Is Nothing
Debug.Print pMail.Subject & " = " & pMail.SentOn
Set pMail = pItems.FindNext
Cells(1, 1) = "Data"
Cells(1, 2) = "To"
Cells(1, 3) = "Subject"
Cells(1, 4) = "Status"
r = 1
On Error GoTo err:
For Each pItem In pMail
Cells(r + 1, 1) = myItem.CreationTime
Cells(r + 1, 2) = myItem.Recipients
Cells(r + 1, 3) = myItem.Subject
Cells(r + 1, 4) = myItem.Categories
r = r + 1
Next
Exit Sub
err:
If err.Number = 13 Then
t = Timer
Do While Timer - t < 1
Loop
Resume
Else
Stop
End If
Loop
End Sub
Использовал код, предоставленный Андрей VG. Спасибо ему еще раз. В коде вывода нет, прилагаю.
Код
Public Sub Test()
Dim outApp As New Outlook.Application
Dim nSpace As Outlook.Namespace
Dim pFolder As Outlook.Folder
Dim pItems As Outlook.Items
Dim pMail As MailItem
Set nSpace = outApp.GetNamespace("MAPI")
Set pFolder = nSpace.Folders("vasya.pupkin@hp.com")
Set pFolder = pFolder.Folders("Sent")
Set pItems = pFolder.Items
Set pMail = pItems.Find("[SentOn] > '09.09.2020' And [SentOn] < '12.09.2020'")
Do Until pMail Is Nothing
Debug.Print pMail.Subject & " = " & pMail.SentOn
Set pMail = pItems.FindNext
Loop
End Sub
Пытался добавить вывод сам по дате отправке , получателю, тема, категории блоком из предыдущего кода но не получилось.
Код
Set nSpace = outApp.GetNamespace("MAPI")
Set pFolder = nSpace.Folders("vasya.pupkin@hp.com")
Set pFolder = pFolder.Folders("Sent Items")
Cells(1, 1) = "Data"
Cells(1, 2) = "To"
Cells(1, 3) = "Subject"
Cells(1, 4) = "Status"
r = 1
On Error GoTo Err:
For Each pItem In pMail
Cells(r + 1, 1) = myItem.CreationTime
Cells(r + 1, 2) = myItem.Recipients
Cells(r + 1, 3) = myItem.Subject
Cells(r + 1, 4) = myItem.Categories
r = r + 1
Next
Exit Sub
1. Цикл до 10000. Насколько это важно? Уменьшил ради эксперимента до 1000 - полет нормальный, меньше уже ошибка повторяется 2. И все таки есть возможность определить период дат для экспорта писем или это невозможно? 3. Если автоматически при запуске файла, запускать макросы, как думаете, нормально будут работать или есть противопоказания ?
.Цитата - не бездумная копия. Для простого ответа есть кнопка Ответить [МОДЕРАТОР]
Уважаемый БМВ. 1. Выгружается только часть насколько я понимаю из-за ошибки. Если Вы знаете как ее исправить - прошу совет в студию. Пример в приложении. 2. Не понятно почему Вы решили идея провальная? Подпапки иметь можно и экспортировать можно, но в этом нет необходимости. Интересует только папка INBOX & SENT 2.Если есть возможность определить период для экспорта - будет замечательно, нет - обойдемся.
Прошу помощи клуба знатоков. Руководством поставлена задача иметь отчет по работе с generic e-mail. Я имею ввиду, некая Excel таблица в которой присутствует информация из INBOX & SENT папок: сколько писем приходит (папка INBOX), когда, от кого, тема и на сколько писем был ответ (папка SENT) от сотрудника, в обязанности которого входит работа с generic e-mail. В MS Outlook присутствует несколько учетных записей.
По создал макрос на основе приложенного уважаемым Webley, но к сожалению выгружается какая то часть и возникает ошибка “Run-Time Error (13), Type Mismatch”. К сожалению знаний не хватает, поэтому прошу помощь зала.
Sanja написал: При изменении ячеек какого столбца должно появляться 'Won' в столбце 'R'?
В столбце "Q" (наименование "Осталось") рассчитывается разница между значениями в столбцах "O" (наименование "Сумма")и "P" (наименование "Получено"). Статус "Won" должен появится в столбце "R" (наименование "Статус") при условии если значение в столбце "Q" меньше или равно нулю.
Sanja, чуть подправил, чтобы даты появлялись там где нужно. Но не могу понять, как сделать так чтобы статус "Won" появлялся не в столбце "P", а в столбце "R"
Sanja написал: Да, описАлся, в столбце 'C' конечно, но смысл вопроса остается тем же
Sanja и Ігор Гончаренко, спасибо за коментарии. Это конечно мне не нужно. Возможно я некорректно пояснил Вам формат таблицы, которой сейчас пытаюсь привести в нормальный вид. Поэтому прилагаю для Вашего понимания. В заголовках присутствуют мои примечания, что я в итоге хотел бы получить. Попытался макрос Sanja привести в соответствие с приложенной таблицей, но что то не получилось
Если реально оптимизировать макрос с автоматическим указанием статуса "Won" не получится или решение будет слишком замороченным, я готов вернусь к варианту Ігор Гончаренко,
У меня последний вопрос, если есть возможность помочь в некоторой оптимизации процесса. Есть несколько столбцов в таблице на этом же листе для которой действует созданный Вами макрос (файл прилагается).
Логика такая: если в столбце "Осталось" сумма меньше или равна 0, автоматически (с помощью нового макроса) в столбце "Статус" проставляется значение "Won", несмотря на то что другие статусы указывает человек при других условиях с помощью выпадающего списка.
И вот этот макрос надо как то запихнуть в уже действующий макрос с датами.
Спасибо за указания. Поправил. Отдельное человеческое спасибо Ігор Гончаренко за помощь. Все получилось. В качестве развития. А каким образом возможно для одной ячейки указывать формат даты со временем, а для другой - только дату.? Формат ячеек естественно не работает.
Прошу помощи. Только начал разбираться в макросами, поэтому не знаю как сделать.
Задача: необходимо проставлять даты изменений в двух ячейках на одном листе. Есть одинаковые макросы (ниже), но с различными адресами ячеек. Понимаю что нужно сделать все в рамках одной процедуры "Worksheet_Change". Но как правильно объединить - так и не осилил.
Макрос №1
Код
Private Sub Worksheet_Change(ByVal Target As Range)'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("X:X"), Target)
xOffsetColumn = -1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd.mm.yyyy, hh:mm"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub
Макрос №2
Код
Private Sub Worksheet_Change(ByVal Target As Range)'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd.mm.yyyy, hh:mm"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub