Vba 用特定超链接替换正文中的特定ID

Vba 用特定超链接替换正文中的特定ID,vba,hyperlink,outlook,Vba,Hyperlink,Outlook,在我完成了完整的作业之后,我发布了这个问题。请帮我解决这个问题 我想在文本正文中搜索ASA1234yy,并将其替换为嵌入的超链接[ASA1234yy][1] 身体中可能有许多这种类型的ID,每个超链接都应该是唯一的,遵循一种模式 迄今为止完成的代码 Sub ConvertToHyperlink(MyMail As MailItem) Dim strID As String Dim Body As String Dim objMail As Outlook.MailItem Dim temp As

在我完成了完整的作业之后,我发布了这个问题。请帮我解决这个问题

我想在文本正文中搜索ASA1234yy,并将其替换为嵌入的超链接[ASA1234yy][1] 身体中可能有许多这种类型的ID,每个超链接都应该是唯一的,遵循一种模式

迄今为止完成的代码

Sub ConvertToHyperlink(MyMail As MailItem)
Dim strID As String
Dim Body As String
Dim objMail As Outlook.MailItem
Dim temp As String
Dim RegExpReplace As String
Dim RegX As Object
strID = MyMail.EntryID

Set objMail = Application.Session.GetItemFromID(strID)
Body = objMail.Body
Body = Body + "Test"
objMail.Body = Body

Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Pattern = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
.Global = True
.IgnoreCase = Not MatchCase
End With
RegExpReplace = RegX.Replace(Body, "http://www.code.com/ABCD")

Set RegX = Nothing
objMail.Body = RegExpReplace
objMail.Save
Set objMail = Nothing
End Sub
此代码仅替换整个id。如何将id添加到超链接中。 添加后,我需要一个嵌入的超链接

谢谢


好的,下面是我修改过的想法

在下面描述的过程中,我面临两个问题

将从Outlook邮件项目提取的指定文本转换为word文档中的超链接,并将其保存在Outlook邮件项目中

i、 e收到的电子邮件->将其保存在Word文档中->将文本更改为超链接->将更改后的Word文档保存到Outlook邮件项目中

  • “我的代码”只找到文档中出现的第一个文本,并用超链接替换它,留下其他文本

  • 在word文档中进行修改后,我想将文档的内容复制到outlook邮件项目中

  • 如果电子邮件中有表格和其他内容,格式就会丢失

  • 我的代码在这里为你

    Sub IncomingHyperlink(MyMail As MailItem)
      Dim strID As String
      Dim Body As String
      Dim objMail As Outlook.MailItem
      Dim temp As String
      Dim RegExpReplace As String
      Dim RegX As Object
      Dim myObject As Object
      Dim myDoc As Word.Document
      Dim mySelection As Word.Selection
    
      strID = MyMail.EntryID
      Set objMail = Application.Session.GetItemFromID(strID)
    
      Set objWord = CreateObject("Word.Application")
      objWord.Visible = True
    
      Set objDoc = objWord.Documents.Add()
      Set objSelection = objWord.Selection
      objSelection.TypeText "GOOD" & objMail.Body
    
      With objSelection.Find
        .ClearFormatting
        .Text = "ASA[a-z][a-z][0-9][0-9][0-9][0-9][0-9]"
        .Forward = True
        .Wrap = wdFindAsk
        .MatchWildcards = True
      End With
      'Find next instance of Pattern "ASA[a-z][a-z][0-9][0-9][0-9][0-9]"
      objSelection.Find.Execute
    
      'Replace it with a hyperlink
      objSelection.Hyperlinks.Add Anchor:=objSelection.Range, _
      Address:="http://www.code.com/" & objSelection.Text, _
      TextToDisplay:=objSelection.Text
    
      objDoc.SaveAs ("C:\Desktop\testdoc.doc")
      objWord.Quit
    
      objMail.Body = objSelection.Paste
      objMail.Save
      Set objMail = Nothing
    End Sub
    

    你能帮我解决这两个问题吗?

    建议:只需使用Word内置的
    Find
    方法即可

    'Set up search
    With Selection.Find
        .ClearFormatting
        .Text = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
        .Forward = True
        .Wrap = wdFindAsk
        .MatchWildcards = True
    End With
    
    ' Find next instance of Pattern "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
    Selection.Find.Execute
    
    ' Replace it with a hyperlink
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
        Address:="http://www.code.com/" & Selection.Text, _
        TextToDisplay:=Selection.Text
    

    以上内容将保留原始文本,例如“ASA5534yy”,并插入超链接
    http://www.code.com/ASA5534yy
    (根据需要进行调整)

    好吧,我想我现在明白你的意思了。您希望使用命名组

    从这个正则表达式模式开始:

    (?ASA\d{3}[a-z]{2})

    然后,将其用于替换模式:


    --戴夫

    嗨,我不太明白这一点。你能在替换之前和之后发布文本的样本吗?我想通过一个示例,它可以帮助我和其他用户。谢谢我的问题是:将特定模式的文本替换为传入电子邮件的超链接。例如:asa223dd显示为asa223dd,但单击它时,它应重定向到code.com/asa223dd/example链接的网站。。。我正在使用字符串“body”存储收到的电子邮件的内容。请不要将更新的问题作为答案发布。要么编辑你原来的问题,要么在事情变得太混乱时发布一个新问题。在这种情况下,你的问题更像是一个新问题。请接受这个问题的答案,然后发布一个新的。嗨,珍,很抱歉发生了这样的混乱。我的新问题发布在这里。您好,谢谢,但我没有使用word文档。我将收到的电子邮件作为一个整体使用。您的代码仅在为文档时有效。我的问题是:将特定模式的文本替换为传入电子邮件的超链接。例如:asa223dd显示为asa223dd,但是当点击它时,它应该被重定向到链接Aha,incoming mail的网站。你的问题中没有说明这一点。我的答案是针对Outlook中创建的邮件(即使用Word作为编辑器)。您好……我在答案部分发布了一个新代码。你现在能找出问题并帮我解决这个问题吗?嗨,我是这个社区的新成员,对给你带来的不便表示歉意,我已经接受了答案。你能帮我解决这个新问题吗?嗨,戴夫,这并不能取代超链接本身。我再次为您修改了代码..请将您的代码格式化为
    code
    。这也解决了“如此对待”的问题