2012-01-08 264 views
0

我试图在VBA中为Word文档创建一个脚本,该文档将书签和超链接匹配字符串并编号为文档中稍后的位置。现在我有两套匹配文本看起来像这样(有时数百entires的)匹配:如何在VBA中自动添加书签和超链接匹配文本

内容

“有一个在这里命名为‘InpCon’

  1. 4326书签:信息1
  2. 32534:信息2
  3. 7980:信息3

“有一个在这里命名为 “InpBod”

  1. 4326书签:信息1
  2. 32534:信息2
  3. 7980:信息3

这是我什么试图做的事:

目录

'有一个书签这里命名为 “InpCon”

  1. 4326:信息1' 超链接设置书签名称: “信息1”
  2. 32534:信息2“超链接设置书签名称: “信息2”
  3. 7980 :信息3 '超链接设置书签名称: “INFO3”

身体

' 有一个在这里命名为 “InpBod”

书签
  1. 4326:信息1 '书签名称: “信息1”
  2. 32534:信息2' 书签名称: “信息2”
  3. 7980:信息3'书签名称: “INFO3”

我我试图在一个更大的脚本的末尾实现这一点。较大的脚本将“InpBod”书签下的所有内容复制到“InpCon”书签中。我不知道在那里输入流程会更有效率。

基本上,我的VBA知识是相当有限的。我试过寻找能够完成这项任务的东西,但还没有找到任何东西。我会粘贴我的代码,但它非常大,并且是一个独立的系统。如果我能完成这个工作,这将会减少我一周的时间。有人可以帮助我或指出我的方向正确吗?提前致谢。

回答

0

不要“手动”生成“InpCon”。使用Word来生成TOC。当生成“InpBod”时,每次遇到想要链接的东西时,都会标记为,然后以实际方式生成TOC。两种可能的方法:

  1. 使用标题样式,然后生成TOC。每次您偶然发现要标记的条目时,请将该段标记为标题Selection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading1)。您可能需要更改默认的标题样式。然后在开头插入一个TOC。
  2. 如果文档使用其他标题,则使用书签。每当您偶然发现要标记的条目时,请创建一个如下所示的书签:ActiveDocument.Bookmarks.Add Range:=Selection.Range.Collapse wdCollapseEnd, Name:=**THEBOOKMARKNAME**。请注意,您必须为书签名称删除空格和那种东西。使用Selection.InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _ wdContentText, ReferenceItem:=ITEM, InsertAsHyperlink:=True, _ IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "

宏录制将暴露每一个对象,你需要做到这一点thorugh所有activedocument.Bookmarks插入链接,然后重复。


使用从评论较新的信息: 的Word的表对象模型是很好这里说明:Looping a Word macro over many list paragraphs causes memory issue这里http://oreilly.com/catalog/writewordmacro/chapter/ch17.html更多的细节。这里是适当的文档:http://msdn.microsoft.com/en-us/library/aa223019(v=office.11).aspx

你应该循环遍历列表集合成员(我收集你应该只有一个列表,InpBod列表)。然后遍历该列表中的段落,选择每个像这样的:

Dim para as Range 
For Each para In ActiveDocument.Lists(1).ListParagraphs 
    para.Range.Select 
Next para 
+0

谢谢。但问题是,我需要VBA创建书签,然后在整个文档中递归地创建超链接。我应该说,整个文件是一个清单,除了列出的信息外没有真实的文本。 InpBod下的所有内容首先从txt文件导入,然后复制到InpCon(都是匹配列表)。稍后的信息将手动添加到InpBod下的每个条目中。这些列表可以有数百个项目的长度,一旦手动输入内容,文档可以超过100页,使得超链接对于导航而言是必不可少的。 – DS7444 2012-01-09 09:16:17

+0

如果每个要加入书签的文本都是唯一的,那么您没有问题,只需在该文本之后命名该书签即可。 但是,你说* InpBod下的所有东西都是先从txt文件导入,然后复制到InpCon *中。正如我所说,不要从txt文件中复制该列表的两倍。复制一次,为项目添加书签,然后按照我之前的建议生成InpCon。 – 2012-01-09 09:16:31

+0

基本上我需要的是在InpBod部分中递归地识别编号的项目符号(1,2,3等),选择编号项目符号下的所有文本,为它分配一个顺序书签(bookmark1,bookmark2,bookmark3等)。然后找到书签文本,将其复制,在InpCon部分下进行搜索,并在找到的文本中从InpBod部分创建超链接到相应的文本/书签。我知道我可以从宏录像机中获得大部分代码,它只是在InpBod下找到编号的项目符号,然后选择我无法弄清的项目符号下的文本。 – DS7444 2012-01-09 09:27:00

相关问题