2016-02-11 3 views
0

У меня есть код VBA, который я использую для отправки текстов из Outlook членам команды моего проекта на работе. Для некоторого фона: для абонентов, не входящих в AT & T, у нас нет проблем с отправкой текстовых сообщений из Outlook, вставляя номера людей в поле Кому: электронные письма Outlook. Тем не менее, все абоненты AT & T получат текст в виде группового сообщения, которого мы хотим избежать. Абоненты non-AT & T правильно получают отдельные тексты, когда мы отправляем группу.Использование VBA в Outlook для отправки текстов с помощью Emojis

Мы написали код VBA, чтобы прокрутить таблицу AT & T, чтобы Outlook отправил по электронной почте один адрес по AT & T номер. Это хорошо работает для нас, однако мы надеялись добавить некоторые эможи в тексты, которые мы отправляем. Я много сделал для Googling и просматривал вопросы о stackoverflows, и я не могу найти какой-либо код, созданный для этой цели. Я также полный noob, когда дело доходит до VBA, и я собрал это решение вместе, пока не получаю помощь от коллеги и читаю через потоки в Интернете. Этот бит о emojis дал мне достаточно проблем, что я думал, что сломаюсь и отправлю этот пост.

Для справки, вот мой код:

Sub EmojiTest() 
    Dim objOutlook As Outlook.Application 
    Dim objOutlookMsg As Outlook.MailItem 
    Dim objOutlookRecip As Outlook.Recipient 
    Dim MobileNumber As String 

     ' Create the Outlook session. 
     Set objOutlook = CreateObject("Outlook.Application") 
     Set xlApp = CreateObject("Excel.Application") 

     'Grab list from Excel 
     Set xlAtt = xlApp.Workbooks.Open("C:\Users\Username\Desktop\Spreadsheet with AT&T numbers.xlsx") 
     xlAtt.Activate 
     LastRow = xlAtt.ActiveSheet.Range("B" & xlAtt.ActiveSheet.Rows.Count).End(-4162).Row 

     For i = 1 To LastRow 
     xlAtt.Activate 
     MobileNumber = xlAtt.ActiveSheet.Range("B" & i).Value 

     ' Create the message. 
     Set objOutlookMsg = objOutlook.CreateItem(olMailItem) 

     objOutlookMsg.SentOnBehalfOfName = "[email protected]" 

     With objOutlookMsg 
      ' Add the To recipient(s) to the message. 
      Set objOutlookRecip = .Recipients.Add(MobileNumber) 
      objOutlookRecip.Type = olTo 

      ' Set the Subject, Body, and Importance of the message. 
      .Subject = "Emoji Test" 
      .Body = "Text with emojis" 
      .Save 
      .Send 
     End With 
     Next i 
     Set objOutlook = Nothing 
     xlApp.Workbooks.Close 
     Set xlApp = Nothing 
End Sub 

Это код, который я никогда не мог придумать себе из-за мое полное отсутствие опыта работы с VBA и ограниченного опытом кодирования в целом. Буду признателен за любую оказанную помощь.

ответ

2

Изменение:

.Body = "Text with emojis"

To:

.Body = "\ud83d\ude03"

Полный список доступен here. Скопируйте поле под названием Java escape string.

Удаляет последовательность юникода, поэтому ввод «\ u» и последовательность UTF-16 должны позволить вам вставлять любые Emoji.

Некоторые Emojis на самом деле представляют собой две отдельные последовательности символов, поэтому вам нужно связать их вместе.

+1

Я пробовал это, и это закончилось тем, что доставило текст, который я набрал. Как и в случае с смайликом, это получилось как «\ u1F601». Я также попробовал «\ u + 1F601», который указан на сайте, который вы связали, но полученный текст остается открытым текстом без emojis. – Choofin

+1

Можете ли вы попробовать эту строку? '' \ uD83D \ uDC71 "' – SCGB

+1

Хм, это тоже не сработало. Я где-то читал, что некоторые шрифты не имеют доступа к значениям Unicode выше определенной точки. Может ли это быть проблемой? Я даже не знаю, имел ли этот вопрос смысл. Спасибо за помощь в этом. – Choofin

1

Я понял!

Sub EmojiTest() 
    Dim objOutlook As Outlook.Application 
    Dim objOutlookMsg As Outlook.MailItem 
    Dim objOutlookRecip As Outlook.Recipient 
    Dim MobileNumber As String 
    Dim strbody As String 

     ' Create the Outlook session. 
     Set objOutlook = CreateObject("Outlook.Application") 
     Set xlApp = CreateObject("Excel.Application") 

     'Grab list from Excel 
     Set xlAtt = xlApp.Workbooks.Open("C:\Users\user\Desktop\Spreadsheet.xlsx") 
     xlAtt.Activate 
     LastRow = xlAtt.ActiveSheet.Range("B" & xlAtt.ActiveSheet.Rows.Count).End(-4162).Row 

     For i = 1 To LastRow 
     xlAtt.Activate 
     MobileNumber = xlAtt.ActiveSheet.Range("B" & i).Value 

     ' Create the message. 
     Set objOutlookMsg = objOutlook.CreateItem(olMailItem) 

     objOutlookMsg.SentOnBehalfOfName = "[email protected]" 
     strbody = "<BODY style=font-size:11pt;font-family:Segoe UI Symbol>&#127881;Congrats!<p>Paragraph 2.<p>Paragraph 3.</BODY>" 
     With objOutlookMsg 
      ' Add the To recipient(s) to the message. 
      Set objOutlookRecip = .Recipients.Add(MobileNumber) 
      objOutlookRecip.Type = olTo 

      ' Set the Subject, Body, and Importance of the message. 
      .Subject = "Emoji Test" 
      .HTMLBody = strbody 


      .Save 
      .Send 
     End With 
     Next i 
     Set objOutlook = Nothing 
     xlApp.Workbooks.Close 
     Set xlApp = Nothing 
End Sub 

В принципе, мне пришлось преобразовать свое сообщение в HTML. Я сделал это, используя «Dim strbody As String» наверху, а затем используя «.HTMLBody = strbody» в моей инструкции WITH. Как только я это сделал, было тривиально использовать шестнадцатеричный код HTML для ввода моего эмулятора. Вот страница с шестнадцатеричным кодом HTML, который я использовал (& # 127881): http://www.fileformat.info/info/unicode/char/1f389/index.htm.

Узнал многое о том, как использовать VBA, так что это было весело.

Спасибо за помощь Сэм.

+1

Отлично, молодец! – SCGB

Смежные вопросы