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

时间:2011-06-18 21:35:48

标签: 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 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 mailitem中提取的指定文本转换为word文档中的超链接,并将其保存在outlook mailitem中。

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

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

  2. 在Word文档中进行修改后,我想将文档的内容复制到outlook mailitem。

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

  4. 我的代码在这里为你...

    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
    

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

2 个答案:

答案 0 :(得分:1)

好的,我想我现在了解你。您想使用命名组。

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

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

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

<a href=http://code.com${key}/example>${key}</a>

- 戴夫

答案 1 :(得分:0)

建议:只使用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

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