在每个页面上重复形状而不使用页眉或页脚

时间:2019-02-20 13:03:38

标签: vba ms-word

我正在尝试在文档左侧的空白处构建自定义导航栏。它有点像一个目录,但是使用形状而不是文本链接来吸引视觉。

到目前为止,我的代码复制并粘贴了一个形状,更改了其文本,并为其分配了指向文档中相关书签的超链接。这是通过在文档中查找每个标题样式1并将其范围和页码记录在两个数组中来完成的。

我希望这些形状出现在每一页上与第一页相同的位置。一开始我尝试过:

For x = 0 To UBound(ranges)

    For y = 0 To UBound(pageNumbers) - 1

        For z = pageNumbers(y) To pageNumbers(y + 1)

            doc.Shapes("grpNav").Select
            Selection.Copy
            Selection.Paste ' (using this because Duplicate crashes Word for some reason!)
            Set shpNav = doc.Shapes(doc.Shapes.Count)
            shpNav.TextFrame.TextRange.Text = ranges(x)
            doc.Hyperlinks.Add Anchor:=shpNav ' etc etc
            shpNav.Top = (shpNav.Top + shpNav.Height * 2) + (doc.PageSetup.PageHeight * y)
        Next z

    Next y

Next x

但是,最后一行会导致错误:

shpNav.Top = (shpNav.Top + shpNav.Height * 2) + (doc.PageSetup.PageHeight * y)
  

参数值超出可接受范围

由于阅读了Shape.Top的MSDN页面,所以我意识到这是因为“顶部”是指形状“边界框”顶部而不是文档顶部的点。

我找不到有关如何实现此目标的任何线索。我尝试先使用pageNumbers数组作为指南来选择所需的页面,但这没什么区别。我不能将形状放在页眉或页脚中,因为这样就无法单击形状来跟随它们的链接。

如何在不使用页眉或页脚的情况下在每个页面上重复一个形状?

0 个答案:

没有答案