目前我有一个代码可以在每个页面上打印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
位置总是从每页的顶部开始计算。
答案 0 :(得分:0)
这就是您有时获得相对垂直位置的原因:.RelativeVerticalPosition = wdRelativeVerticalPositionPage
。删除它,你会在每个页面上都有一个画布。