Программно добавить гиперссылку на строку - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь автоматизировать создание электронной подписи в VB.NET с помощью Word Interop.

Все работает отлично, за исключением попыток программного добавления гиперссылок, таких как (например) адрес электронной почты - все хорошо и неплохо писать письмо и ожидать, что почтовый клиент / браузер с другой стороны преобразует его, но я бы хотел указать ссылки самостоятельно (для таких вещей, как социальные ссылки, наша политика конфиденциальности и т. д.)

Вот соответствующие сегменты кода, который я использую:

Imports Word = Microsoft.Office.Interop.Word

Dim objWord As Word.Application = CreateObject("Word.Application")

objWord.Visible = False

Dim objDoc = objWord.Documents.Add()
Dim objSelection = objWord.Selection
Dim objEmailOptions = objWord.EmailOptions
Dim objSignatureObject = objEmailOptions.EmailSignature
Dim objSignatureEntries = objSignatureObject.EmailSignatureEntries

Try
    If Len(strEmail) > 0 Then
        objSelection.TypeText(strEmail)
    End If

Catch ex As Exception
    Debug.Print(ex.Message)
End Try

Используя пример здесь , я считаю, что вместо objSelection.TypeText(strEmail) is ...

следует использовать следующее
If Len(strEmail) > 0 Then
    Dim objEmailRange = objSelection.Range.Start()
    objSelection.Hyperlinks.Add(objEmailRange, strEmail, , , strEmail)    
End If

... однако это вызывает исключение COM.

A first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in Signature_v2.exe
Command failed

Правильно ли я определяю начало диапазона (на основе this )? Что я делаю не так?

1 Ответ

0 голосов
/ 15 января 2019

Гиперссылка не является фактическим текстом; это просто украшение текста, которое уже существует. Вы должны передать диапазон, выделение или документ первому параметру («Якорь»), равному Hyperlinks.Add().

Пример:

ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="http:\\www.microsoft.com"
...