确定是否已在Word中的每个页面中插入Canvas

时间:2010-03-17 02:55:44

标签: vba ms-word word-vba

目前我有一个代码可以在每个页面上打印OMR Mark。基本上我会在每个页面中插入一个Canvas,然后在Canvas中插入一个OMR标记线系列。

最近我发现了一个问题,其中一个画布被放置在一个页面之外,它出现在上一页而不是当前页面。

下面是我如何将canvas和OMR Marks插入每个页面的代码片段:

' Start Code Snippet
Sub GenerateOMR()
    Dim ShpCanvas As Shape
    Dim MaxPages As Integer
    Dim PNo As Integer
    ClearOMR
    MaxPages = Selection.Information(wdNumberOfPagesInDocument)
    For PNo = 1 To MaxPages
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=PNo, Name:=""

        Select Case PNo
            Case 1
                Set ShpCanvas = ActiveDocument.Shapes.AddCanvas(0, 0.5, 600, 300)
            Case Else
                Set ShpCanvas = ActiveDocument.Shapes.AddCanvas(0, 0, 600, 300)
        End Select

        ' Add a canvas on each page
        With ShpCanvas
            .Name = "OMR_Canvas_" & CStr(PNo)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        End With

        ' Insert a white background rectange and remove the rectangle border line
        With ShpCanvas.CanvasItems.AddShape(msoShapeRectangle, 536, 0, 64, 300)
            .Name = "OMR_WhiteBackground_" & CStr(PNo)
            .Fill.ForeColor.RGB = RGB(255, 255, 255)
            .Line.ForeColor.RGB = RGB(255, 255, 255)
        End With

        PrintOMRPage ShpCanvas, PNo
    Next PNo
End Sub
' End Code Snippet

有一种名为PrintOMRPage方法的自定义方法,此方法与此无关。

我现在的问题是,如何知道画布是否已插入页面?基本上我将循环所有页面并检查画布是否已插入该页面。显然我找不到正确的方法。

我尝试使用ActiveDocument.Shapes(1).Top进行检查,并验证Top位置是否为负值。但显然Top位置总是从每页的顶部开始计算。

1 个答案:

答案 0 :(得分:0)

这就是您有时获得相对垂直位置的原因:.RelativeVerticalPosition = wdRelativeVerticalPositionPage。删除它,你会在每个页面上都有一个画布。