无法通过 VBA 在 Word 中的指定单元格中插入对书签的交叉引用

Unable to insert a cross reference to a bookmark in specified cell in Word through with VBA

我试图将书签交叉引用到 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

以下作品。关键是您如何指定交叉引用的位置。我不知道 "why",但是当你 select 整个单元格时,Word 决定插入点在前一个单元格中。它可能与 Word 中的单元格结构有关 - 只有编写底层 Word 代码的人才知道。

但是,无论如何,诀窍是按照用户的意愿去做。通常,用户会在 单元格中单击 ,这样插入点(光标)就会闪烁。

因为与 Excel 一样, 使用 Selection 总是更好,我更改了代码以使用 Range 对象来target 交叉引用所在的位置。无论您使用 Range 还是 Selection - 关键是要 折叠 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