web-dev-qa-db-ja.com

Outlook VBA-現在選択されているテキストをクリップボードにコピーする方法は?

私の質問

Microsoft Outlook 2007で現在選択されているテキストを取得するにはどうすればよいですか?

  • 開いているメッセージウィンドウで
  • またはプレビューペインで現在選択されているメッセージ

そしてそれをクリップボードにコピーしますか?

Microsoft Outlook2007を使用しています。


私がすでに試したこと

DataObjectsを使用してテキストをクリップボードに入れたり、クリップボードからテキストを取得したりできることを知っています。

難しいのは、現在選択されているテキストを取得することです

次のコマンドを試しました。

  • Outlook.copy
  • Outlook.selection.copy
  • Outlook.activeexplorer.selection.item(1)。 .。
    多くのバリエーションがありますが、成功していません。

Outlookで現在選択されているテキストをVBA経由で取得することはできないと述べている情報源をいくつか見つけましたが、少なくともCtrl-C(コピー)コマンドを呼び出してクリップボードの内容を使用できる必要があると思います。

また、説明されているようにインスペクターでいくつかの解決策に出くわしました ここ 、しかし私はエラーメッセージを受け取りました。 「MSWordオブジェクトライブラリ」を参照し忘れたせいか、月曜日にやってみます。

4
MostlyHarmless

OutlookはWord(インストールされている場合)をエディターとして使用するため、Wordを入手するのは少し面倒です。 :)

Wordアプリケーション、Word文書、選択の順に参照する必要があります。

次のコードをOutlookで機能させるには、「Microsoft Wordオブジェクトライブラリ」に参照(VBAエディター->ツール->参照)を追加し、「Microsoftフォームオブジェクトライブラリ」に1つ追加する必要があります。 、システムクリップボードのテキストを実際にコピーできるようにします。

注:私にとって、Office 2013では、MSフォームオブジェクトがリストに含まれていなかったため、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
5