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