Как сделать макрос, разработанный в Word, в Outlook? - PullRequest
0 голосов
/ 09 декабря 2018

относительно новичок в кодировании, поэтому я ценю любую помощь, которую вы можете мне оказать.

Я написал фрагмент кода в Word, чтобы найти ссылки «[edit]» в документе, разорвать гиперссылку и удалить текст.Он отлично работает в Word, и я хотел бы адаптировать этот макрос для запуска в Outlook.Я перешел к инструментам> ссылкам, чтобы разрешить Outlook доступ к библиотеке объектов Word, и вставил следующий код перед моим макросом "deleteeditlinks":

Dim Ins As Outlook.Inspector
  Dim Document As Word.Document
  Dim Word As Word.Application
  Dim Selection As Word.Selection

  Set Ins = Application.ActiveInspector
  Set Document = Ins.WordEditor
  Set Word = Document.Application
  Set Selection = Word.Selection

Окончательный код выглядит следующим образом:

Public Sub DeleteEditLinks()
Dim Ins As Outlook.Inspector
Dim Document As Word.Document
Dim Word As Word.Application
Dim Selection As Word.Selection

Set Ins = Application.ActiveInspector
Set Document = Ins.WordEditor
Set Word = Document.Application
Set Selection = Word.Selection

 Dim oField As Field ' breaks hyperlinks of "[edit]" links, and deletes them
  For Each oField In ActiveDocument.Fields
    If oField.Type = wdFieldHyperlink Then
      If Left(oField.Result, 4) = "edit" Then
        oField.Unlink
      End If
    End If
  Next
  Set oField = Nothing

    Dim sample
    sample = "[edit]"

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = sample
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Но это не работает.Как мне настроить это для работы с текстом электронной почты Outlook?

Спасибо за вашу помощь,

Бен

1 Ответ

0 голосов
/ 09 декабря 2018

Я не уверен, как должен выглядеть объект Fields в outlook, а также что именно вы пытаетесь достичь, но! .. Я нашел основные проблемы в вашем коде, поэтому моё решение может быть полезным.

  • Вы ссылаетесь на ActiveDocument внутри, поскольку он является частью коллекции объектов Outlook.Это не так, поэтому вам нужно обратиться к объекту Document, который вы правильно создали из инспектора.То же самое с Selection.
  • Я использовал позднее связывание (Dim oField As Object), не уверен, что с ранним связыванием и опцией «tools> links» у вас тоже есть эта проблема, но константы слова wdFindContinue не были распознаны такЯ использовал значения для них (просто гуглил их).

Итак, если в ваших целевых электронных письмах есть поля как-то - ваш обновленный код ниже должен работать ... Пожалуйста, напишите, если не так.

Public Sub DeleteEditLinks()

Dim Ins As Outlook.Inspector
Dim Document As Object
Dim oField As Object
Dim sample As String

Set Ins = Application.ActiveInspector
Set Document = CreateObject("Word.Document")
Set Document = Ins.WordEditor

For Each oField In Document.Fields
  If oField.Type = 88 Then
    If Left(oField.Result, 4) = "edit" Then
      oField.Unlink
    End If
  End If
Next
Set oField = Nothing

sample = "[edit]"

Document.Application.Selection.Find.ClearFormatting
Document.Application.Selection.Find.Replacement.ClearFormatting

With Document.Application.Selection.Find
    .Text = sample
    .Replacement.Text = ""
    .Forward = True
    .Wrap = 1
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute Replace:=2
End With


End Sub
...