Сначала вам нужно узнать, как выглядит ваша электронная почта в макросе VBA. Попробуйте макрос в { ссылка }. Это макрос диагностики c, который позволяет просматривать свойства электронной почты. В частности, он выведет весь текст и Html тела в файл в удобочитаемом формате. Макрос нуждается в ссылках на «Среду выполнения сценариев Microsoft» и «Объекты данных Microsoft ActiveX в библиотеке». Спросите, если вы не знаете, что это значит.
В верхней части макроса вы найдете #Const Selected = True
. Замените это на #Const Selected = False
. Выберите одно из этих писем и запустите макрос InvestigateEmails()
. Изучите файл InvestigateEmails.txt, который будет на вашем рабочем столе. Я предполагаю, что текстовое тело будет выглядеть примерно так:
Description:‹t›This is a communication from the Estates‹c›‹l›
LoadName:‹t›CEEJKL‹c›‹l›
ProviderName:‹t›The Nice to have company‹c›‹l›
ID:‹t›45672-ddc4-4leo-ba6d-faci1b631‹c›‹l›
TinyID:‹t›6919‹c›‹l›
В приведенном выше предположении: ‹t›
представляет tab
, ‹c›
представляет carriage return
и ‹l›
представляет linefeed
. «Если LoadName:» сопровождается пробелами, вы увидите что-то вроде ‹s 5›
, которое представляет 5 пробелов.
Также может быть тело Html. Может быть проще извлечь LoadName из тела Hmtl, если это что-то простое:
<table>
<tr><td>Description:</td><td>This is a communication from the Estates</td></tr>
<tr><td>LoadName:</td><td>CEEJKL</td></tr>
<tr><td>ProviderName:</td><td>The Nice to have company</td></tr>
<tr><td>ID:</td><td>45672-ddc4-4leo-ba6d-faci1b631</td></tr>
<tr><td>TinyID:</td><td>6919</td></tr>
</table>
Пожалуйста, сообщите, что вы видите в файле «InvestigateEmails.txt».
Я создал электронное письмо, содержащее таблицу с данными из вашего письма. Я использовал свой макрос диагноза c для создания «InvestigateEmails.txt». Важный раздел этого текстового файла:
Text: |Description:‹2 crlf›|
|This is a communication from the Estates‹2 crlf›|
|LoadName:‹2 crlf›|
|CEEJKL‹2 crlf›|
|ProviderName:‹2 crlf›|
|The Nice to have company‹2 crlf›|
|ID:‹2 crlf›|
|45672-ddc4-4leo-ba6d-faci1b631‹2 crlf›|
|TinyID:‹2 crlf›|
|6919‹2 crlf›|
| ‹crlf›|
Html: |<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmln|
: : : : : :
|WordSection1><table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0 style='border-collapse:c|
|ollapse;border:none'><tr><td width=312 valign=top style='width:233.75pt;border:solid windowtext 1.0p|
|t;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"inherit|
|",serif;color:#242729;border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>Descripti|
|on:</span><o:p></o:p></p></td><td width=312 valign=top style='width:233.75pt;border:solid windowtext|
| 1.0pt;border-left:none;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0p|
|t;font-family:"inherit",serif;color:#242729;border:none windowtext 1.0pt;padding:0cm;mso-fareast-lan|
|guage:EN-GB'>This is a communication from the Estates</span><o:p></o:p></p></td></tr><tr><td width=3|
|12 valign=top style='width:233.75pt;border:solid windowtext 1.0pt;border-top:none;padding:0cm 5.4pt |
|0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"inherit",serif;color:#24272|
|9;border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>LoadName:</span><o:p></o:p></|
|p></td><td width=312 valign=top style='width:233.75pt;border-top:none;border-left:none;border-bottom|
|:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=Ms|
|oNormal><span style='font-size:10.0pt;font-family:"inherit",serif;color:#242729;border:none windowte|
|xt 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>CEEJKL</span><o:p></o:p></p></td></tr><tr><td width|
|=312 valign=top style='width:233.75pt;border:solid windowtext 1.0pt;border-top:none;padding:0cm 5.4p|
|t 0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"inherit",serif;color:#242|
|729;border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>ProviderName:</span><o:p></|
|o:p></p></td><td width=312 valign=top style='width:233.75pt;border-top:none;border-left:none;border-|
|bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0cm 5.4pt'><p cl|
|ass=MsoNormal><span style='font-size:10.0pt;font-family:"inherit",serif;color:#242729;border:none wi|
|ndowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>The Nice to have company</span><o:p></o:p></p|
|></td></tr><tr><td width=312 valign=top style='width:233.75pt;border:solid windowtext 1.0pt;border-t|
|op:none;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"i|
|nherit",serif;color:#242729;border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>ID:|
|</span><o:p></o:p></p></td><td width=312 valign=top style='width:233.75pt;border-top:none;border-lef|
|t:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 5.4pt 0c|
|m 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"inherit",serif;color:#242729;|
|border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>45672-ddc4-4leo-ba6d-faci1b631<|
|/span><o:p></o:p></p></td></tr><tr><td width=312 valign=top style='width:233.75pt;border:solid windo|
|wtext 1.0pt;border-top:none;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-size:1|
|0.0pt;font-family:"inherit",serif;color:#242729;border:none windowtext 1.0pt;padding:0cm;mso-fareast|
|-language:EN-GB'>TinyID:</span><o:p></o:p></p></td><td width=312 valign=top style='width:233.75pt;bo|
|rder-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.|
|0pt;padding:0cm 5.4pt 0cm 5.4pt'><p class=MsoNormal><span style='font-size:10.0pt;font-family:"inher|
|it",serif;color:#242729;border:none windowtext 1.0pt;padding:0cm;mso-fareast-language:EN-GB'>6919</s|
|pan><o:p></o:p></p></td></tr></table><p class=MsoNormal><o:p> </o:p></p></div></body></html>|
Тело Html, созданное в Outlook, полно информации о форматировании. Из этого Html можно извлечь данные, но было бы легче извлечь его из текста. Почти каждое письмо, которое я получаю с телом Html, имеет текстовое тело в этом формате. Я уверен, что когда Outlook получает электронное письмо без текстового тела, оно создает его, беря тело Html, отбрасывая все теги и вставляя два vbCrLfs после каждого отброшенного тега блока. Результирующее текстовое тело обычно легко обрабатывать.
Игнорируя проблему извлечения кода компании из электронного письма до тех пор, пока не будет известен формат электронного письма, этот макрос Outlook демонстрирует, как открыть рабочую книгу и извлечь значение ячейки.
Option Explicit
Sub DemoGetCompanyName()
' Required reference to "Microsoft Excel nn.n Object Library" where "nn.n"
' depends on the version of Office installed.
' Change to reference your workbook and worksheet
Const WbkName As String = "CompanyCodes.xlsx"
Const WshtName As String = "Codes"
' I avoid names starting "xl" or "ol" so as to prevent a clash
' with a Microsoft name
Dim CompCode As String
Dim CompName As String
Dim ExlApp As Excel.Application
Dim Path As String
Dim Rng As Excel.Range
Dim WbkComp As Excel.Workbook
Dim WshtCodes As Excel.Worksheet
' Replace with code to extract company code from email
CompCode = "CEEJKL"
Path = CreateObject("WScript.Shell").specialfolders("Desktop")
Set ExlApp = Application.CreateObject("Excel.Application")
With ExlApp
.Visible = True ' This slows your macro but helps during debugging
.ScreenUpdating = False ' Reduces flash and increases speed if you write to workbook
' Open workbook read only
Set WbkComp = .Workbooks.Open(Path & "\" & WbkName, , True)
End With
With WbkComp
Set WshtCodes = .Worksheets(WshtName)
End With
With WshtCodes
Set Rng = Cells.Find(What:=CompCode, After:=.Range("A1"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False)
If Rng Is Nothing Then
' Code not found
Debug.Assert False
CompName = ""
Else
CompName = .Cells(Rng.Row, 2).Value
End If
End With
' Close workbook and tidy up
Set WshtCodes = Nothing
WbkComp.Close
Set WbkComp = Nothing
ExlApp.Quit
Set ExlApp = Nothing
Debug.Print CompCode & " -> " & CompName
End Sub