我将接管一份 275 页的 Word 文档的所有权,该文档一旦转换为 PDF,就会被一个十几人的团队用来浏览分类方案中的信息,包括图表和解释。其中许多解释是文档本身的交叉引用。我的前任一直在慢慢地手动完成此操作,对于每个交叉引用,首先在目的地创建书签,然后转到源并创建指向同一书签的超链接。
我正在考虑至少自动添加书签部分,因为所有目的地都已在文档中以粗体显示。这些格式例如是 1/02 07,我的前任已将其关联到书签名称 B1_0207,我想保留此格式(这样做是为了克服 Word 的限制)。所以我需要在开头添加一个 B,将 / 替换为 _,并删除所有空格
我也考虑过自动创建超链接,因为在同一个示例中,对超链接的引用将写为 1/02 07 但不是粗体,因此可能很容易找到和匹配(尽管有些解释直接针对其他内容)方案,例如 A47G 1/02 07,必须排除)。
我发现了以下我已经改编的宏
Sub ScratchMacro()
'A basic Word macro coded by Greg Maxey
Dim oRng As Range, oRngDup As Range, oBookName As Range
Set oRng = Selection.Range
Set oRngDup = oRng.Duplicate
Set oBookName = oRng
With oRng.Find
.ClearFormatting
.Font.Bold = True
Do While .Execute
oBookName = Replace(oBookName.Text, "/", "_")
oBookName = Replace(oBookName.Text, " ", "")
oBookName = ("B" & (oBookName))
If oRng.InRange(oRngDup) Then
ActiveDocument.Bookmarks.Add oBookName.Text, oRng
oRng.Collapse wdCollapseEnd
Else
Exit Do
End If
Loop
End With
lbl_Exit:
Exit Sub
End Sub
我无法让它执行我想要的操作,因为我立即收到书签名称错误,而且我什至看到它更改了文档本身中的原始文本,这是我绝对不希望发生的。
我还没有尝试过自动化超链接,但喜欢对此的一些投入。非常感谢任何想要帮助初学者的人:)
将找到的文本重新格式化为可用书签名称的代码正在替换该文本:
oBookName = Replace(oBookName.Text, "/", "_")
...实际上替换了找到的范围内的文本。
试试这个:
Sub ScratchMacro()
Dim oRng As Range, BookName As String, doc As Document
Set doc = ActiveDocument
Set oRng = doc.Range 'or use current Selection...
With oRng.Find
.ClearFormatting
.Font.Bold = True
.Wrap = wdFindStop 'stop when the end of the content is reached
Do While .Execute
'oRng.Select
'read range to string and replace / and spaces
BookName = Replace(oRng.Text, "/", "_")
BookName = "B" & Replace(BookName, " ", "")
doc.Bookmarks.Add BookName, oRng
Loop
End With
End Sub