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

时间:2018-04-28 06:04:56

标签: vba ms-word word-vba cross-reference

我正在尝试将书签交叉引用到Word文档中列的第2行,但是,书签继续插入第一列。这很奇怪,因为我在插入交叉引用之前选择了正确的单元格。

有谁知道为什么会这样,或者有任何其他方法来插入交叉引用?

仅供参考,行选择似乎每次都能正常工作。

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 :(得分:0)

以下作品。关键是如何指定交叉引用的位置。我不知道"为什么",但是当您选择整个单元格时,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