我的文档中有很多列表,其数字看起来像“1.3.2”,我希望自动创建列表元素的交叉引用。
我正在尝试创建一个宏:
如何使用VBA实现这一目标?
答案 0 :(得分:1)
在查看对象模型以及Word的行为后,我认为您可以管理某些内容,但可能并不完全符合您的设想。问题在于编号项目,它们似乎面向字幕而不是编号行...在任何情况下,当通过对话框将交叉引用插入“编号项目”时,Word会创建书签,然后参考。所以我的建议模仿了这种行为,如下面的代码片段所示。
您需要/想要做的是维护一个“计数器”来增加书签名称(或者您可以像Word那样生成GUID)。我的演示的书签名称是硬编码的。
此示例在当前选择的段落开头设置隐藏书签。然后插入交叉引用,扩展Range以包含交叉引用(因为该方法不返回范围或对象)并将其剪切到剪贴板。然后,用户可以将其粘贴到任何他想要的地方。
Sub InsertThenCopyCrossRef()
Dim rng As word.Range, rngBkm As word.Range
Dim bkm As word.Bookmark
Dim sMyRef As String
sMyRef = "_MyRef_1" 'a counter or something to make name unique!
Set rng = Selection.Range
Set rngBkm = rng.Duplicate.Paragraphs(1).Range
rngBkm.Collapse wdCollapseStart
Set bkm = ActiveDocument.Bookmarks.Add(sMyRef, rngBkm)
rng.InsertCrossReference wdRefTypeBookmark, wdNumberFullContext, sMyRef
rng.MoveEnd wdWord, 1
rng.Fields(1).Cut
'rng.Select
End Sub
答案 1 :(得分:0)
我为了它的乐趣和冗长的故事而喋喋不休:我认为你不会设法做到这一点。原因:这是用于在VBA中创建对编号项目的交叉引用的代码:
Set r = Selection.Range
r.InsertCrossReference ReferenceType:="Numbered item", _
ReferenceKind:=wdNumberRelativeContext, ReferenceItem:="5", _
InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, _
SeparatorString:=" "
麻烦在于ReferenceItem:=“5”。当我录制它时,它只是第五个编号的项目,无论其列表级别如何。 因此,您现在要做的就是找到一种方法来将编号的项目识别为文档中的第n个编号项目。
如果你可以解决这个问题,你可以指定一个组合键来复制对当前列表项的引用,如下所示:
Sub CopyReference()
Dim r As Range
Dim dObject As DataObject
Set dObject = New DataObject
Set r = Selection.Range
r.InsertCrossReference ReferenceType:="Nummeriertes Element", _
ReferenceKind:=wdNumberRelativeContext, ReferenceItem:="5", _
InsertAsHyperlink:=True, IncludePosition:=False, SeparateNumbers:=False, _
SeparatorString:=" "
dObject.SetText r.Paragraphs(1).Range.Fields(1).Code
r.Paragraphs(1).Range.Fields(1).Delete
dObject.PutInClipboard
End Sub
另一个关键组合来粘贴你的引用:
Sub pasteField()
Dim fld As Field, dObject As DataObject
Dim gg
Set fld = ActiveDocument.Fields.Add(Selection.Range, wdFieldRef)
Set dObject = New DataObject
dObject.GetFromClipboard
gg = dObject.GetText
fld.Code.Text = gg
fld.Update
End Sub
正如您所看到的,我实际上并没有复制交叉引用字段,只复制了它的代码。