gpt4 book ai didi

vba - 使用 VBA 宏选择和复制 Outlook 电子邮件正文

转载 作者:行者123 更新时间:2023-12-04 02:22:01 26 4
gpt4 key购买 nike

我是 Excel 中 VBA 宏的初学者,这是 Outlook 中的第一次尝试,但这是我想要做的:

在 Outlook 2010 中,将宏分配给按钮,按下该按钮时,

  • 获取事件电子邮件的整个正文
  • 将包含所有格式和 html 的正文复制到剪贴板
  • 打开一个新的word文档
  • 将剪贴板的内容粘贴到这个词 doc
  • 清除剪贴板

  • 到目前为止,我所拥有的只是下面的第 1 步和第 3 步(我想知道我是否在第 1 步中以错误的方式进行了此操作):
    Sub pasteToWord()

    Dim activeMailMessage As Outlook.MailItem 'variable for email that will be copied.
    Dim activeBody
    Dim clearIt As String 'Intended to eventually clear clipboard.

    'Code to get to the body of the active email.
    If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then _
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)
    activeBody = activeMailMessage.Body
    'MsgBox activeBody
    '^This displayed what I want in plaintext form,
    'so I think im on the right track

    'Code to copy selection to clipboard

    'Code to open new Word doc
    Set WordApp = CreateObject("Word.Application")
    WordApp.Documents.Add
    WordApp.Visible = True

    'Code to paste contents of clipboard to active word document

    'Code to clear clipboard

    End Sub

    任何填写上述空白的指导将不胜感激。

    编辑:

    这是迄今为止最接近的,感谢大卫泽门斯。我想我缺少一些引用,因为我的编译器不理解 ClearClipboard() 函数的“DataObject”。它确实复制并粘贴到带有格式的 word 中,如下所示(尽管我不得不注释掉最后一个函数以避免错误):
    Sub pasteToWord()

    Dim WordApp As Word.Application 'Need to link Microsoft Word Object library
    Dim wdDoc As Word.Document 'for these to be understood by compiler
    Dim activeMailMessage As Outlook.MailItem
    Dim activeBody As String

    If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then

    'Get a handle on the email
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)

    'Ensure Word Application is open
    Set WordApp = CreateObject("Word.Application")

    'Make Word Application visible
    WordApp.Visible = True

    'Create a new Document and get a handle on it
    Set wdDoc = WordApp.Documents.Add

    'Copy the formatted text:
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

    'Paste to the word document
    wdDoc.Range.Paste

    'Clear the clipboard entirely:
    Call ClearClipBoard

    End If

    End Sub

    Public Sub ClearClipBoard()
    Dim oData As New DataObject 'object to use the clipboard -- Compiler error,
    'I think I'm missing a reference here.

    oData.SetText Text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it
    End Sub

    最佳答案

    此方法将从所选邮件项中复制格式化文本,并将其粘贴到 Word 文档中:

    Dim WordApp As Word.Application
    Dim wdDoc As Word.Document
    Dim activeMailMessage As MailItem

    If TypeName(ActiveExplorer.Selection.Item(1)) = "MailItem" Then

    'Get a handle on the email
    Set activeMailMessage = ActiveExplorer.Selection.Item(1)

    'Ensure Word Application is open
    Set WordApp = CreateObject("Word.Application")

    'Make Word Application visible
    WordApp.Visible = True

    'Create a new Document and get a handle on it
    Set wdDoc = WordApp.Documents.Add

    'Copy the formatted text:
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy

    'Paste to the word document
    wdDocument.Range.Paste

    'Clear the clipboard entirely:
    Call ClearClipBoard

    End If

    注意 使用 function like the one described here 可以很容易地完全清除剪贴板。 :
    Public Sub ClearClipBoard() 
    Dim oData As New DataObject 'object to use the clipboard

    oData.SetText Text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it
    End Sub

    关于vba - 使用 VBA 宏选择和复制 Outlook 电子邮件正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27907811/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com