Проблема с кодом в ссылке в том, что он написан для позднего связывания, но тем не менее использует именованную константу Excel. Измените «xlCellTypeLastCell» на «11».
Поскольку вы хотите задать гиперссылки на вопросы, попробуйте что-то вроде:
Sub HyperlinkQuestions()
Application.ScreenUpdating = False
Dim xlApp As Object, xlWkBk As Object, StrWkBkNm As String, r As Long
Dim StrFnd As String, StrHLnk As String, StrHTxt As String
StrWkBkNm = "C:\Users\" & Environ("Username") & "\Documents\QuestionLinks.xlsx"
If Dir(StrWkBkNm) = "" Then
MsgBox "Cannot find the designated workbook: " & StrWkBkNm, vbExclamation
Exit Sub
End If
On Error Resume Next
'Start Excel
Set xlApp = CreateObject("Excel.Application")
If xlApp Is Nothing Then
MsgBox "Can't start Excel", vbExclamation
Exit Sub
End If
On Error GoTo 0
With xlApp
'Hide our Excel session
.Visible = False
' The file is available, so open it.
Set xlWkBk = .Workbooks.Open(StrWkBkNm, False, True)
If xlWkBk Is Nothing Then
MsgBox "Cannot open:" & vbCr & StrWkBkNm, vbExclamation
.Quit: Set xlApp = Nothing: Exit Sub
End If
' Process the workbook.
With xlWkBk
With .Worksheets("Sheet1")
'Process the F/R data
For r = 2 To .Cells(.Rows.Count, 1).End(-4162).Row ' -4162 = xlUp
If Trim(.Range("A" & r)) <> vbNullString Then
StrFnd = .Range("A" & r).Text
With .Range("B" & r)
If .Hyperlinks.Count = 1 Then
StrHLnk = .Hyperlinks(1).Address
StrHTxt = .Hyperlinks(1).TextToDisplay
Else
StrHLnk = .Text
StrHTxt = .Text
End If
End With
Call LinkQuestion(StrFnd, StrHLnk, StrHTxt)
End If
Next
End With
.Close False
End With
.Quit
End With
' Release Excel object memory
Set xlWkBk = Nothing: Set xlApp = Nothing
Application.ScreenUpdating = True
End Sub
Sub LinkQuestion(StrFnd As String, StrHLnk As String, StrHTxt As String)
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = StrFnd
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = True
.MatchWholeWord = True
.Execute
End With
Do While .Find.Found
.Hyperlinks.Add .Duplicate, StrHLnk, , , StrHTxt
.Start = .Hyperlinks(1).Range.End
.Find.Execute
Loop
End With
End Sub
Запуск макроса «HyperlinkQuestions» превратит ваш вопросы в гиперссылки.
Макрос предполагает, что вы используете книгу Excel с именем QuestionLinks.xlsx, хранящуюся в папке «Документы», а список вопросов и гиперссылок находится в столбцах A и B, соответственно, в ' Лист1' .