我正在尝试将书签交叉引用到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
答案 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