У меня есть макрос, который получит все письма, содержащие «HAPPY», «NEUTRAL» и «SAD» в теме и скопируйте их на новый лист книги. Я хочу добавить функциональность, когда пользователь может также определить дату, чтобы отображать настроение только на определенную дату. Может ли кто-нибудь помочь мне?Excel VBA: Получить тему по электронной почте на основе дат
Кроме того, код ниже читает электронные письма во входящих. Мне нужно, чтобы он читал все папки в моем письме (например, «Исходящие» и «Вложенные папки»). Не могли бы вы также помочь мне в этом?
Sub GetMood()
Dim outlookApp
Dim olNs As Outlook.Namespace
Dim Fldr As Outlook.MAPIFolder
Dim olMail As Variant
Dim myTasks
Dim sir() As String
Dim ws As Worksheet
Dim iRow As Variant
Dim d As Date
x = 2
d = ThisWorkbook.Sheets("Main").Cells(11, 7).Value
Set outlookApp = CreateObject("Outlook.Application")
Set olNs = outlookApp.GetNamespace("MAPI")
Set Fldr = olNs.GetDefaultFolder(olFolderInbox)
Set myTasks = Fldr.Items
For Each olMail In myTasks
If (InStr(1, olMail.Subject, "HAPPY") > 0) Then
ThisWorkbook.Sheets("Report").Cells(1, 1) = "Sender"
ThisWorkbook.Sheets("Report").Cells(1, 2) = "Mood"
ThisWorkbook.Sheets("Report").Cells(1, 3) = "Date"
ThisWorkbook.Sheets("Report").Cells(x, 1) = olMail.SenderName
ThisWorkbook.Sheets("Report").Cells(x, 2) = olMail.Subject
ThisWorkbook.Sheets("Report").Cells(x, 3) = olMail.ReceivedTime
x = x + 1
ElseIf (InStr(1, olMail.Subject, "NEUTRAL") > 0) Then
ThisWorkbook.Sheets("Report").Cells(x, 1) = olMail.SenderName
ThisWorkbook.Sheets("Report").Cells(x, 2) = olMail.Subject
ThisWorkbook.Sheets("Report").Cells(x, 3) = olMail.ReceivedTime
x = x + 1
ElseIf (InStr(1, olMail.Subject, "SAD") > 0) Then
ThisWorkbook.Sheets("Report").Cells(x, 1) = olMail.SenderName
ThisWorkbook.Sheets("Report").Cells(x, 2) = olMail.Subject
ThisWorkbook.Sheets("Report").Cells(x, 3) = olMail.ReceivedTime
x = x + 1
'MsgBox "Report Generated", vbOKOnly
'Else
'olMail.Display
Exit For
End If
Next
End Sub
Private Sub Workbook_Open()
Worksheets("StartSheet").Activate
End Sub
Я всегда был под впечатлением, что может быть только один экземпляр Outlook, открытой, так и в _Outlook only_ 'CreateObject' ключевое слово' GetObject' Если Outlook уже открыт. Утверждение, что я не могу найти документацию для ее поддержки, но при тестировании на моем компьютере 'CreateObject' возвращает ссылку на уже существующий экземпляр (диспетчер задач показывает только один экземпляр). –
@ DarrenBartrup-Cook: Никогда не проверял это, но, возможно, вы правы! – R3uK