4

Мой вопрос

Как можно получить выбранный в настоящее время текст в Microsoft Outlook 2007

  • в открытом окне сообщения
  • или в текущем выбранном сообщении на панели предварительного просмотра

и скопировать его в буфер обмена?

Я использую Microsoft Outlook 2007.


Что я уже пробовал

Я знаю, что могу использовать DataObjects, чтобы поместить текст в буфер обмена или получить текст из буфера обмена.

Сложность состоит в том, чтобы получить текущий выбранный текст

Я попробовал следующие команды:

  • Outlook.copy
  • Outlook.selection.copy
  • Outlook.activeexplorer.selection.item(1). ...
    во многих вариациях, но безуспешно.

Я обнаружил некоторые источники, утверждающие, что было бы невозможно получить текущий выбранный текст в Outlook через VBA, но я думаю, что, по крайней мере, должна быть возможность вызвать команду Ctrl-C (копировать) и затем использовать содержимое буфера обмена.

Я также наткнулся на некоторые решения с инспектором, как описано здесь, но я получил сообщение об ошибке. Возможно, это потому, что я забыл сослаться на "Библиотеку объектов MS Word" - попробую в понедельник.

1 ответ1

5

Так как Outlook использует Word (если установлен) в качестве редактора, получить его немного сложно. :)

Вы должны сослаться на приложение Word, затем документ Word, затем выбор.

Чтобы следующий код работал в Outlook, необходимо добавить ссылку (VBA Editor -> Tools -> References) в "Библиотеку объектов Microsoft Word", а другую в "Библиотеку объектов Microsoft Forms", чтобы мы могли фактически скопировать текст системного буфера обмена.

Примечание. Для меня в Office 2013 объект MS Forms отсутствовал в списке, поэтому я просто добавил пользовательскую форму в проект VBA, которая автоматически добавила ссылку, а затем просто удалила форму. Ссылка попробую.

Как бы то ни было, я покопался во многих источниках и собрал код, который скопирует выделенный текст в буфер обмена с некоторой базовой проверкой ошибок (протестировано в Outlook 2013):

Public Sub CopyTextToClipBoard()

    Dim objItem As Object
    Dim objInsp As Outlook.Inspector

    Dim objWord As Word.Application
    Dim objDoc As Word.Document
    Dim objSel As Word.Selection
    On Error Resume Next

    ' Reference the current Outlook item
    Set objItem = Application.ActiveInspector.CurrentItem
    If Not objItem Is Nothing Then
        If objItem.Class = olMail Then
            Set objInsp = objItem.GetInspector
            If objInsp.EditorType = olEditorWord Then
                Set objDoc = objInsp.WordEditor
                Set objWord = objDoc.Application
                Set objSel = objWord.Selection

                On Error GoTo NotText
                With New MSForms.DataObject
                    .SetText objSel.Text
                    .PutInClipboard
                End With
                On Error Resume Next       

            End If
        End If
    End If

    Set objItem = Nothing
    Set objWord = Nothing
    Set objSel = Nothing
    Set objInsp = Nothing

NotText:
    If Err <> 0 Then
        MsgBox "Data on clipboard is not text."
    End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .