Невозможно вставить перекрестную ссылку на закладку в указанной ячейке в Word через VBA - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь сделать перекрестную ссылку на закладку во 2-й строке столбца в документе Word, однако закладка продолжает вставляться в первый столбец. Это странно, поскольку я выбрал правильную ячейку перед вставкой перекрестной ссылки.

Кто-нибудь знает, почему это происходит, или есть альтернативные способы вставки перекрестной ссылки?

К вашему сведению, выбор строки, кажется, работает нормально каждый раз.

NoOfTables = WordObject.ActiveDocument.Tables.Count
For t = 1 To NoOfTables
    If WordObject.ActiveDocument.Tables(t).Title = "AsetRsetTbl" Then
        WordObject.ActiveDocument.Tables(t).Cell(2, 2).Select
        WordObject.Selection.InsertCrossReference ReferenceType:="Bookmark", _
            ReferenceKind:=wdContentText, ReferenceItem:=BookMarkName & y, _
            InsertAsHyperlink:=True, IncludePosition:=False, _
            SeparateNumbers:=False, SeparatorString:=" "
    End If
Next t

1 Ответ

0 голосов
/ 28 апреля 2018

Следующие работы. Ключ в том, как вы указываете, куда должна идти перекрестная ссылка. Я не знаю «почему», но когда вы выбираете всю ячейку, Word решает, что точка вставки находится в предыдущей ячейке. Вероятно, это как-то связано со структурами ячеек в Word - наверняка знают только люди, написавшие основной код Word.

Но, в любом случае, хитрость заключается в том, чтобы сделать это так, как сделал бы пользователь. Обычно пользователь нажимает в ячейке, так что точка вставки (курсор) мигает.

Поскольку, как и в Excel, всегда лучше, чтобы , а не работал с Selection, я изменил код, чтобы использовать объект Range для цели, на которую идет перекрестная ссылка. Используете ли вы Range или Selection - клавиша предназначена для свертывания выбора (например, нажатия клавиши со стрелкой влево или вправо на клавиатуре).

Я также изменил код, чтобы сделать его более эффективным и точным, работая с Document объектом вместо ActiveDocument, который может измениться без вашего ведома.

Sub XRefInTable()
    Dim WordObject As word.Application
    Dim doc As word.Document
    Dim tbl As word.Table
    Dim rngCell As word.Range
    Dim t As Long, NoOfTables As Long

    Set WordObject = New Word.Application
    Set doc = WordObject.ActiveDocument
    NoOfTables = doc.Tables.Count
    For t = 1 To NoOfTables
        If doc.Tables(t).Title = "AsetRsetTbl" Then
            Set rngCell = doc.Tables(t).Cell(2, 2).Range
            rngCell.Collapse wdCollapseStart
            rngCell.InsertCrossReference ReferenceType:="Bookmark", _
                ReferenceKind:=wdContentText, ReferenceItem:=bookmarkname & y, _
                InsertAsHyperlink:=True, IncludePosition:=False, _
                SeparateNumbers:=False, SeparatorString:=" "
        End If
    Next t
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...