Outlook VBA - como copiar o texto atualmente selecionado para a área de transferência?

4

Minha pergunta

Como pode obter o texto atualmente selecionado no Microsoft Outlook 2007

  • em uma janela de mensagem aberta
  • ou na mensagem atualmente selecionada no painel de visualização

e copie para a área de transferência?

Estou usando o Microsoft Outlook 2007.

O que eu já tentei

Eu sei que posso usar DataObjects para colocar texto na área de transferência ou obter texto da área de transferência.

A dificuldade é obter o texto atualmente selecionado

Eu tentei os seguintes comandos:

  • Outlook.copy
  • Outlook.selection.copy
  • Outlook.activeexplorer.selection.item (1). ...
    em muitas variações, mas sem sucesso.

Encontrei algumas fontes declarando que não seria possível obter o texto atualmente selecionado no Outlook via VBA, mas acho que pelo menos é possível chamar um comando Ctrl-C (copiar) e usar o conteúdo do arquivo. prancheta.

Eu também deparei com algumas soluções com o Inspector, conforme descrito aqui , mas recebi uma mensagem de erro. Talvez seja porque eu esqueci de referenciar a "Biblioteca de Objetos do MS Word" - vou tentar isso na segunda-feira.

    
por MostlyHarmless 01.08.2014 / 15:44

1 resposta

5

Como o Outlook usa o Word (se instalado) como seu editor, é um pouco difícil conseguir isso. :)

Você precisa fazer referência ao aplicativo Word, depois ao documento do Word e, em seguida, à seleção.

Para que o código a seguir funcione no Outlook, você precisa adicionar uma referência ( VBA Editor - > Ferramentas - > Referências ) à "Biblioteca de Objetos do Microsoft Word" e a outra ao " Microsoft Forms Object Library ", para que possamos realmente copiar o texto da área de transferência do sistema.

Observação: Para mim, no Office 2013, o objeto MS Forms não estava na lista, então acabei de adicionar um UserForm ao projeto VBA, que adicionou a referência automaticamente e, em seguida, excluiu o formulário. A referência parou.

De qualquer forma, eu pesquisei várias fontes e aqui está um código que colei o texto realçado na área de transferência, com uma verificação de erros básica (testada no 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
    
por 01.08.2014 / 18:46